如何解决具有自定义视图的对话框,setCanceledOnTouchOutside不起作用
|| 正在使用具有自定义视图的对话框。该视图的布局为300dp x 300dp,其大小为屏幕中心。现在,我希望在用户触摸对话框外时将其关闭。我以为:太好了!为此有一个功能:setCanceledOnTouchOutside(boolean)。但是我没有效果。它根本不起作用。 我还尝试添加一个onTouchListener并侦听对话框外的事件,但是这些事件似乎并没有被侦听器捕获:( 有什么想法为什么这行不通或如何以其他方式完成? 这是我声明对话框的方式:mMenuDialog = new Dialog(this,android.R.style.Theme_Translucent_NoTitleBar);
mMenuDialog.setContentView(R.layout.menu_dialog);
mMenuDialog.setCancelable(true);
mMenuDialog.setCanceledOnTouchOutside(true);
这是自定义视图的声明
<LinearLayout xmlns:android=\"http://schemas.android.com/apk/res/android\"
android:layout_width=\"300dp\" android:layout_height=\"300dp\"
android:background=\"@drawable/menu_dialog_background\"
android:orientation=\"vertical\" android:layout_gravity=\"center\"
android:id=\"@+id/dialog_root\">
...
</LinearLayout>
这是使用的背景:
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<shape xmlns:android=\"http://schemas.android.com/apk/res/android\">
<padding android:left=\"15dp\" android:top=\"15dp\" android:right=\"15dp\"
android:bottom=\"15dp\" />
<solid android:color=\"#f0f0f0\" />
<corners android:radius=\"15dip\" />
</shape>
解决方法
可能要晚一点,但对于仍在寻找答案的人来说,就在这里。
将自定义样式应用于对话框。在您的样式中,包括以下内容:
<item name=\"android:windowIsFloating\">true</item>
否则,对话框将使用全屏显示。因此,没有可单击以取消的外部区域。这适用于具有自定义内容的对话框。
例:
<style name=\"dialog_theme\" parent=\"@android:style/Theme.Dialog\">
<item name=\"android:windowBackground\">@android:color/transparent</item>
<item name=\"android:windowIsFloating\">true</item>
<item name=\"android:windowNoTitle\">true</item>
<item name=\"android:layout_width\">wrap_content</item>
<item name=\"android:layout_height\">wrap_content</item>
<item name=\"android:layout_gravity\">center</item>
</style>
希望这可以帮助。
, 现在,我确实通过将我的自定义对话框视图布局与其他LinearLayout封装在一起并向此封装的LinearLayout添加onTouchListener来解决了该问题。在那个onTouchListener中,我检查了单击是在对话框内部还是外部。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。