Android如何清除activitie和dialog之间的触摸事件
情景: 有一个活动和一个对话框。该活动有一个要启动的按钮,在屏幕上显示对话框 问题: 当对话框显示时,我按一下按钮(而不是单点),对话框变为不可见,但很快会再次显示!我想触摸对话框外部,但不再显示对话框 如何做到这一点?还是有其他解决办法 这是我的活动Android如何清除activitie和dialog之间的触摸事件,android,Android,情景: 有一个活动和一个对话框。该活动有一个要启动的按钮,在屏幕上显示对话框 问题: 当对话框显示时,我按一下按钮(而不是单点),对话框变为不可见,但很快会再次显示!我想触摸对话框外部,但不再显示对话框 如何做到这一点?还是有其他解决办法 这是我的活动 public class MyAndroidAppActivity extends Activity { Button button; @Override public void onCreate(Bundle savedInstanceSt
public class MyAndroidAppActivity extends Activity {
Button button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
button = (Button) findViewById(R.id.button1);
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
CallDialog call = new CallDialog();
call.show(this);
}
});
}
}
还有我的对话
public class CallDialog{
Dialog mDialog;
public void show(Context context){
Dialog mDoialog = new Dialog(context);
setContentView(R.layout.dialog);
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
window.setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
getWindow().getDecorView().getRootView().setOnTouchListener(new OnTouchListener(){
@Override
public boolean onTouch(View v, MotionEvent event) {
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
mDialog.dismiss();
}
return false;
}
});
}
}似乎没有必要为根视图设置触控监听器,您可以通过调用setCanceledOnTouchOutside()来控制同样的事情
默认设置为false,因此在对话框外触摸时可以关闭。如何在对话框外单击事件默认情况下,如果设置为CANCELEDONTOUCHOUTHER(true),则可以使用对话框外的触摸事件。您可以通过public void setOnDismissListener(最终OnDismissListener listener)收听关闭事件
/**
* Sets whether this dialog is canceled when touched outside the window's
* bounds. If setting to true, the dialog is set to be cancelable if not
* already set.
*
* @param cancel Whether the dialog should be canceled when touched outside
* the window.
*/
public void setCanceledOnTouchOutside(boolean cancel) {
if (cancel && !mCancelable) {
mCancelable = true;
}
mWindow.setCloseOnTouchOutside(cancel);
}