问题描述
||
正在使用具有自定义视图的对话框。该视图的布局为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中,我检查了单击是在对话框内部还是外部。