Android:触摸关闭对话框窗口

13

我希望能够通过轻触屏幕来关闭我的安卓应用程序中的对话框窗口。这种操作是否可行?如果可以,该怎么做呢?

我尝试在对话框上设置一些“onClickEven”,但是并不存在。您认为有什么其他解决方案吗?

请问如何实现这个功能呢?


也许 这个教程(android-close-dialog-window-on-touch) 可以帮助你。 - iamtheexp01
5个回答

33
您可以使用 dialog.setCanceledOnTouchOutside(true); 这个方法。如果您在对话框外面触摸屏幕,它会自动关闭该对话框。

14

如果你的对话框中包含任何视图,请尝试在该视图中获取触摸事件,并在用户触摸该视图时关闭对话框。例如,如果你的对话框中有任何图像,则代码应该像这样。

Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.mylayout);
//create a layout with imageview
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setOnClickListener(new View.OnClickListener(){
    public void onClick(View v) {
        dialog.dismiss();
    } 
});
dialog.show();

8
Dialog dialog = new Dialog(context)
{
    public boolean dispatchTouchEvent(MotionEvent event)  
    {
        dialog.dismiss();
        return false;
    }
};

完成啦!


1
这个可以工作。但是Android Studio会报错,因为“对话框可能没有被初始化”。为了避免这种情况,只需将dialog.dismiss()替换为this.dismiss()即可。 - hordurh

1
如果有人仍在寻找通过onTouch事件关闭对话框的解决方案,这里是一段代码片段:
public void onClick(View v) {
                AlertDialog dialog = new AlertDialog(MyActivity.this){

                    @Override
                    public boolean dispatchTouchEvent(MotionEvent event)  
                    {
                        dismiss();
                        return false;
                    }

                };
                dialog.setIcon(R.drawable.MyIcon);
                dialog.setTitle("MyTitle");
                dialog.setMessage("MyMessage");
                dialog.setCanceledOnTouchOutside(true);
                dialog.show();

        }

1

您可以扩展Dialog类并覆盖dispatchTouchEvent()方法。

编辑:您还可以实现Window.Callback接口,并使用dialog.getWindow().setCallback()将其设置为对话框的窗口回调。此实现应调用相应的对话框方法或以自己的方式处理事件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接