android - 单击外部时如何关闭Android对话框(使用FLAG_NOT_FOCUSABLE)
问题描述
我有一个对话框,当我单击它外部时我想将其关闭。但是,我不希望它接收按键事件,因为它是一个音量对话框,我希望活动能够接收按键音量上下事件。所以我设置FLAG_NOT_FOCUSABLE
了,如下所示:
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.MyDialogTheme);
AlertDialog alert = builder.create();
Window window = alert.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE);
alert.setView(view);
问题是,有了这个标志,我也不能让对话框在它外面发生触摸时消失。
有关如何通过单击对话框外部来关闭对话框的所有解决方案?喜欢dialog.setCanceledOnTouchOutside(true);
在这种情况下不起作用。
解决方案
1 - 设置flag-FLAG_NOT_TOUCH_MODAL
对话框的窗口属性
Window window = this.getWindow();
window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL);
2 - 将另一个标志添加到 Windows 属性,FLAG_WATCH_OUTSIDE_TOUCH
- 这个标志用于对话框在其可见区域之外接收触摸事件。
3 - 覆盖onTouchEvent()
对话框并检查操作类型。如果操作类型为“ MotionEvent.ACTION_OUTSIDE
”,则表示用户正在对话区域之外进行交互。因此,在这种情况下,您可以关闭对话或决定要执行的操作。查看普通版?
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_OUTSIDE){
System.out.println("TOuch outside the dialog ******************** ");
this.dismiss();
}
return false;
}
推荐阅读
- ios - Flutter video_player 插件使人像相机视频静音
- python - Pygame 创建无限数量的敌人
- c# - Post 方法中的映射无法正常工作
- javascript - 点击浏览器后退按钮时如何阻止 React 组件在加载时重新获取数据
- flutter - DateTime 类参数应该是 const 但 DateTime 不支持这个
- android - 如何从 Firestore 云或实时数据库中检索数据,如自定义排序
- javascript - 如何使用 JQuery 实现星级评分
- r - 表中的错误:所有参数必须具有相同的长度
- unicode - 每种语言的字符范围
- forestplot - 在森林图中包括置信区间