【问题标题】:Android: Close dialog window on touchAndroid:触摸时关闭对话框窗口
【发布时间】:2011-04-27 09:02:36
【问题描述】:

我想通过简单地触摸屏幕来关闭我的 Android 应用程序中的对话框窗口。这可能吗?如果有,怎么做?

我已经考虑在对话框上设置一些“onClickEven”,但它不存在。

这怎么可能?

【问题讨论】:

标签: android events dialog touch


【解决方案1】:

您可以使用dialog.setCanceledOnTouchOutside(true);,如果您在对话框外触摸 u=,它将关闭对话框。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:
      Dialog dialog = new Dialog(context)
      {
          public boolean dispatchTouchEvent(MotionEvent event)  
          {
              dialog.dismiss();
              return false;
          }
      };
      

      你就完成了!

      【讨论】:

      • 这行得通。 Android Studio 给了我一个错误,因为“对话框可能尚未初始化”。为了避免这种情况,只需将 dialog.dismiss() 替换为 this.dismiss()
      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

        如果有人仍在寻找通过以下方式关闭对话框的解决方案 onTouch 事件,这里是一段 sn-p 代码:

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

        【讨论】:

          猜你喜欢
          • 2012-04-07
          • 2014-06-25
          • 1970-01-01
          • 2013-11-08
          • 1970-01-01
          • 2017-02-03
          • 2012-08-19
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多