我有一个显示为对话框的活动:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
super.setTheme(android.R.style.Theme_Dialog);
setFinishOnTouchOutside(true);
}
当用户通过触摸活动对话窗口外部关闭活动对话框时,活动结束。
如何在此活动中设置监听器?
这很重要,因为我希望能够致电
setResult(intResultCode, intent);
在完成之前。
在onPause()中调用setResult()可能为时已晚。
答案 0 :(得分:3)
为什么要那么挣扎?只需覆盖Activity ...
中的finish()方法@Override
public void finish() {
setResult(int resultCode, Intent data);
super.finish();
}
答案 1 :(得分:0)
先放
dialog.setCanceledOnTouchOutside(true)
然后使用
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Rect dialogBounds = new Rect();
getWindow().getDecorView().getHitRect(dialogBounds);
if (!dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
// Tapped outside so we finish the activity
this.finish();
}
return super.dispatchTouchEvent(ev);
}
答案 2 :(得分:0)
这是可能的。您可以覆盖onTouchEvent()
@Override
public boolean onTouchEvent(MotionEvent event) {
if (MotionEvent.ACTION_OUTSIDE == event.getAction()) {
// Your logic
// return true if you don't want to pass event further
}
return super.onTouchEvent(event);
}
如果您没有收到ACTION_OUTSIDE
事件,可能需要添加FLAG_NOT_TOUCH_MODAL
和FLAG_WATCH_OUTSIDE_TOUCH
窗口标记。没有它,对我有用。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
...
}