版權聲明:本文爲博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接和本聲明。
本文連接:https://blog.csdn.net/smileiam/article/details/90643667
遇到這樣一個需求,一個RecyclerView佈局(GridView九宮格樣式),每點擊一項,彈出一個氣泡提示框,再點擊下一項的時候,上一項氣泡提示框消失,下一項氣泡提示框顯示出來。用Dialog實現提示框顯示,通常須要點擊兩次item才能實現上面的效果,第一次是Dialog響應點擊事件,消失提示框;第二次點擊才Item能接收到。git
要實現上面的效果,必須讓Activity能接收Dialog區域外的點擊事件,網上找了一圈,參考了這篇文章Android Dialog外部點擊事件解決了個人問題,可是文中寫的是用Activity樣式的Dialog來實現,其實只有Dialog就能實現,只須要在Dialog的構造函數中添加如下兩行代碼,設置Window的標誌位,就可讓Activity響應Dialog區域外的點擊事件。特此mark下吧。github
//實現Dialog區域外部事件能夠傳給Activity
//FLAG_NOT_TOUCH_MODAL做用:即便該window可得到焦點狀況下,仍把該window以外的任何event發送到該window以後的其餘window
getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
//FLAG_WATCH_OUTSIDE_TOUCH做用:若是點擊事件發生在window以外,就會收到一個特殊的MotionEvent,爲ACTION_OUTSIDE
getWindow().setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
Window的Flag事件就好多,具體能夠參考這篇文章,WindowManager.LayoutParams的各類flag含義app
再重寫Dialog中的onTouch事件,點擊Dialog區域外時,把Dialog隱藏掉便可。ide
getWindow().getDecorView().setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_OUTSIDE) {
dismiss();
}
return true;
}
});
實現上面我說的給列表項添加氣泡的效果參考的是這個demo https://github.com/xujiaji/HappyBubble,本身改了改適配,在不一樣手機上,offsetY感受計算不大同樣。函數
————————————————
版權聲明:本文爲CSDN博主「瀟瀟鳳兒」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/smileiam/article/details/90643667佈局