通过外部触摸事件关闭对话框不起作用
Dismissing the dialog by outside touch event is not working
我有一个实用程序 class,其中 vll return 是我应用程序中 activity 的一个对话框。因为我需要让用户关闭外部 click.So 的对话框,我在这里使用
lDialog.setCancelable( true );
lDialog.setCanceledOnTouchOutside( true );
我参考了其中一些链接Here & here
甚至我也检查了这些标志
lDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
lDialog.getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
但它对我不起作用..我参考了太多来自SOF的答案,但不幸的是没有对我有用..
这是我迄今为止尝试过的全套代码。它工作完美,除了外部触摸关闭事件..
public static Dialog createDialog( Context context,
int viewId )
{
Dialog lDialog = new Dialog( context,
AlertDialog.THEME_HOLO_LIGHT );
lDialog.getWindow().setBackgroundDrawable( new ColorDrawable( 1 ) );
lDialog.requestWindowFeature( Window.FEATURE_NO_TITLE );
lDialog.setContentView( viewId );
lDialog.setCancelable( true );
lDialog.setCanceledOnTouchOutside( true );
lDialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN );
return lDialog;
}
对不起我糟糕的英语!!谢谢。
对话框可能占满了整个屏幕,因此没有 "outside" 单击。你试过做一个非常简单的对话框然后测试外部点击吗
我从未使用过这些 setFlags 方法:
lDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
lDialog.getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
或者这个:
WindowManager.LayoutParams lp2 = new WindowManager.LayoutParams();
lp2.copyFrom( lDialog.getWindow().getAttributes() );
lp2.width = WindowManager.LayoutParams.MATCH_PARENT;
lp2.height = WindowManager.LayoutParams.MATCH_PARENT;
lDialog.getWindow().setAttributes( lp2 );
而且我使用 setCanceledOnTouchOutside
没问题
在这里,终于要回答我的问题了
如果您希望对话框全屏显示,使用 AlertDialog.THEME_HOLO_LIGHT 将不起作用。另一种方法是创建自己的样式,如下所示:
public static Dialog createDialog( Context context,
int viewId )
{
Dialog lDialog = new Dialog( context,
R.style.ThemeDialogCustom );
lDialog.getWindow().setBackgroundDrawable( new ColorDrawable( 1 ) );
lDialog.requestWindowFeature( Window.FEATURE_NO_TITLE );
lDialog.setContentView( viewId );
lDialog.setCancelable( true );
lDialog.setCanceledOnTouchOutside( true );
lDialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN );
return lDialog;
}
在值文件夹中有 style.xml,如下所示:::
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ThemeDialogCustom" parent="android:Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowBackground">@color/transparent_color</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
</resources>
还在值文件夹中添加 colors.xml::
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="transparent_color">#00000000</color>
</resources>
这对我有用。希望它也对你有用:)
我有一个实用程序 class,其中 vll return 是我应用程序中 activity 的一个对话框。因为我需要让用户关闭外部 click.So 的对话框,我在这里使用
lDialog.setCancelable( true );
lDialog.setCanceledOnTouchOutside( true );
我参考了其中一些链接Here & here
甚至我也检查了这些标志
lDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
lDialog.getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
但它对我不起作用..我参考了太多来自SOF的答案,但不幸的是没有对我有用..
这是我迄今为止尝试过的全套代码。它工作完美,除了外部触摸关闭事件..
public static Dialog createDialog( Context context,
int viewId )
{
Dialog lDialog = new Dialog( context,
AlertDialog.THEME_HOLO_LIGHT );
lDialog.getWindow().setBackgroundDrawable( new ColorDrawable( 1 ) );
lDialog.requestWindowFeature( Window.FEATURE_NO_TITLE );
lDialog.setContentView( viewId );
lDialog.setCancelable( true );
lDialog.setCanceledOnTouchOutside( true );
lDialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN );
return lDialog;
}
对不起我糟糕的英语!!谢谢。
对话框可能占满了整个屏幕,因此没有 "outside" 单击。你试过做一个非常简单的对话框然后测试外部点击吗
我从未使用过这些 setFlags 方法:
lDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
lDialog.getWindow().setFlags(LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
或者这个:
WindowManager.LayoutParams lp2 = new WindowManager.LayoutParams();
lp2.copyFrom( lDialog.getWindow().getAttributes() );
lp2.width = WindowManager.LayoutParams.MATCH_PARENT;
lp2.height = WindowManager.LayoutParams.MATCH_PARENT;
lDialog.getWindow().setAttributes( lp2 );
而且我使用 setCanceledOnTouchOutside
在这里,终于要回答我的问题了
如果您希望对话框全屏显示,使用 AlertDialog.THEME_HOLO_LIGHT 将不起作用。另一种方法是创建自己的样式,如下所示:
public static Dialog createDialog( Context context,
int viewId )
{
Dialog lDialog = new Dialog( context,
R.style.ThemeDialogCustom );
lDialog.getWindow().setBackgroundDrawable( new ColorDrawable( 1 ) );
lDialog.requestWindowFeature( Window.FEATURE_NO_TITLE );
lDialog.setContentView( viewId );
lDialog.setCancelable( true );
lDialog.setCanceledOnTouchOutside( true );
lDialog.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN );
return lDialog;
}
在值文件夹中有 style.xml,如下所示:::
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="ThemeDialogCustom" parent="android:Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item>
<item name="android:windowBackground">@color/transparent_color</item>
<item name="android:windowSoftInputMode">stateUnspecified|adjustPan</item>
<item name="android:colorBackgroundCacheHint">@null</item>
</style>
</resources>
还在值文件夹中添加 colors.xml::
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="transparent_color">#00000000</color>
</resources>
这对我有用。希望它也对你有用:)