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);
}