我已经为我的应用程序实现了一个自定义对话框。我想实现的是,当用户在对话框之外单击时,对话框将被关闭。我必须为此做些什么?
发布于 2011-12-05 18:47:02
您可以使用dialog.setCanceledOnTouchOutside(true);
,如果您在对话框外部进行触摸,它将关闭对话框。
像这样,
Dialog dialog = new Dialog(context)
dialog.setCanceledOnTouchOutside(true);
或者如果你的对话框是非模型的,
1-为对话框的窗口属性设置标志-FLAG_NOT_TOUCH_MODAL
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
2-将另一个标志添加到窗口属性,,FLAG_WATCH_OUTSIDE_TOUCH
-此标志用于对话框在其可见区域之外接收触摸事件。
3-覆盖对话框的onTouchEvent()
并检查操作类型。如果操作类型为'MotionEvent.ACTION_OUTSIDE
‘,则表示用户在对话框区域之外进行交互。因此,在这种情况下,您可以忽略对话框或决定要执行的操作。查看普通打印?
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("TOuch outside the dialog ******************** ");
this.dismiss();
}
return false;
}
有关更多信息,请查看How to dismiss a custom dialog based on touch points?和How to dismiss your non-modal dialog, when touched outside dialog region
发布于 2013-06-18 19:19:22
只需使用
dialog.setCanceledOnTouchOutside(true);
发布于 2012-03-31 06:08:10
您可以使用此onTouchEvent实现。它阻止底层活动对触摸事件作出反应(如前面提到的howettl)。
@Override
public boolean onTouchEvent ( MotionEvent event ) {
// I only care if the event is an UP action
if ( event.getAction () == MotionEvent.ACTION_UP ) {
// create a rect for storing the window rect
Rect r = new Rect ( 0, 0, 0, 0 );
// retrieve the windows rect
this.getWindow ().getDecorView ().getHitRect ( r );
// check if the event position is inside the window rect
boolean intersects = r.contains ( (int) event.getX (), (int) event.getY () );
// if the event is not inside then we can close the activity
if ( !intersects ) {
// close the activity
this.finish ();
// notify that we consumed this event
return true;
}
}
// let the system handle the event
return super.onTouchEvent ( event );
}
来源:http://blog.twimager.com/2010/08/closing-activity-by-touching-outside.html
https://stackoverflow.com/questions/8384067
复制相似问题