Android中Dialog兩種設置外部點擊事件的方法

開發筆記:參考網上文章

第一種:

首先在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);
     }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章