【问题标题】:How to dismiss a Dialog in Android by clicking it inside?如何通过在内部单击来关闭 Android 中的对话框?
【发布时间】:2012-02-29 08:13:46
【问题描述】:

我看过几篇关于如何通过单击外部来关闭对话框的帖子。但是有没有办法通过单击对话窗口内部来获得相同的功能?

是否有任何对话侦听器可以检测到对对话窗口的点击?

【问题讨论】:

    标签: android dialog listener dismiss


    【解决方案1】:

    覆盖Dialog.onTouchEvent(...) 可以捕获屏幕上任何位置的任何点击。通过点击任意位置来关闭对话框:

    Dialog dialog = new Dialog(this) {
      @Override
      public boolean onTouchEvent(MotionEvent event) {
        // Tap anywhere to close dialog.
        this.dismiss();
        return true;
      }
    };
    

    这个 sn-p 取消了调用 dialogObject.setCanceledOnTouchOutside(true); 的需要。

    【讨论】:

      【解决方案2】:

      假设您想在对话框范围内的任何位置检测触摸事件。如果您正在创建自定义对话框(即将一组Views 组合成某种布局View,然后使用.setContentView() 将父View 设置为对话框的主要内容视图),那么也许您可以简单地为该内容父 View 设置一个 onTouch 侦听器。此外,您可以使用mDialog.findViewById() 来获取视图,例如,如果您使用的是AlertDialog,也许您可​​以通过某种方式确定使用什么资源ID 来获取其主要布局View

      【讨论】:

        【解决方案3】:

        如果您的对话框中有一个布局,您可以将其作为视图引用,并在其上放置一个 onClickListener。因此,假设您的对话框具有自定义布局,并查看整个对话框,请获取对其的引用。

        例如,假设一个对话框有一个名为 mainll 的 LinearLayout,其中包含您的自定义视图,您会:

        LinearLayout ll - (LinearLayout) findViewById(R.id.mainll);
        ll.setOnClickListener(...) { onClick()... }
        

        然后任何时候在 LinearLayout 中点击任何东西,它都会注册一个点击事件。

        【讨论】:

          【解决方案4】:

          您始终可以创建自己的 Dialog 活动并在用户单击要关闭 Dialog 的区域时调用 finish()。

          【讨论】:

          • 感谢您的回答。但是我想让对话框悬停在我当前的活动上(在对话框上方和下方有一个透明区域,从中显示我的当前活动)。为了详细说明,单击我的活动中的按钮时会显示对话框。我可以通过使用 dialog.setCanceledOnTouchOutside(true); 点击 Dialog 之外的区域来关闭 Dialog;根据reks,我不能使用对话框上的任何按钮!因此,我正在尝试寻找一种在单击对话框时会关闭对话框的方法。
          • 您可以在活动中使用任何您想要的布局;包括一个透明的。它看起来就像一个对话框,你可以让它以任何你想要的方式运行。如果你真的想要一些看起来和行为都像模态对话框但具有自定义关闭逻辑的东西,这将起作用。
          【解决方案5】:

          这是一个示例,它解释了如何在对话框中处理 onTouch 事件。诀窍在于创建自定义侦听器。

          http://about-android.blogspot.co.uk/2010/02/create-custom-dialog.html

          【讨论】:

            【解决方案6】:
            here i have taken my close icon ,if u need u can take anything like button
            
            first of all u have implement to the class
            
            class somethingclass Dialog implements View.OnClickListener
            
            then set the event for particular 
            
                  icon_close.setOnClickListener(this);
            
            then override the class function
            
                @Override
                public void onClick(View v) {
                    if(R.id.icon_close==v.getId()){
                        dismiss();
                    }else
            }
            
            
            Note:  if passible u can give dilaog.dismiss();
            

            【讨论】:

              猜你喜欢
              • 2012-01-13
              • 2023-02-16
              • 1970-01-01
              • 2021-11-24
              • 2018-12-02
              • 1970-01-01
              • 1970-01-01
              • 2011-08-03
              • 1970-01-01
              相关资源
              最近更新 更多