開發筆記:參考網上文章
第一種:
首先在View創建之前設置兩個Flag,一個設置窗口爲非模式的,這樣除窗口外的內容就可以獲得touch事件,然後設置窗口外部touch事件發生時的通知。最後重寫onTouchEvent,監聽窗口外的Touch事件。這樣就可以在監聽方法中自定義窗口外點擊事件的響應,是否關閉窗口或者其他操作
onCreate中添加
getWindow().setFlags(LayoutParams.FLAG_NOT_TOUCH_MODAL, LayoutParams.FLAG_NOT_TOUCH_MODAL);
getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
然後重寫onTouchEvent方法
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
//要做的事情
return true;
}
return super.onTouchEvent(event);
}
第二種:
實用性比較強,根據點擊的位置判斷是不是在dialog的外部
同樣重寫onTouchEvent方法
@Override
public boolean onTouchEvent(MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (!(event.getX() >= -10 && event.getY() >= -10)|| event.getX() >= (自己的view).getWidth() + 10|| event.getY() >= (自己的view).getHeight() + 20) {
//要做的事情
return true;
}
}
return super.onTouchEvent(event);
}