开发笔记:参考网上文章
第一种:
首先在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);
}