android - 显示 AlertDialog 时暂停活动
问题描述
我知道,由于AlertDialog
是演示的一部分,Activity
因此显示它不会触发OnPause
. Activity
我想要实现的是展示AlertDialog
并以某种方式触发OnPause
呈现Activity
。
在OnResume
我设置OnGlobalLayoutListener
为根据键盘是否可见来调整滚动视图的位置。但是,如果 anAlertDialog
是可见的,那么继续监听布局更改并相应地调整滚动视图可能没有意义,考虑到“焦点”当前位于AlertDialog
并且Activity
在背景中部分可见。
我知道我可以以“弹出”样式开始活动,但这不是我想要的;我想用AlertDialog
.
解决方案
使用另一个活动作为对话框。然后它会自动暂停您当前的活动。要以对话框形式启动活动,我在 AndroidManifest.xml 中这样定义它:
<activity android:theme="@android:style/Theme.Dialog" />
在你的活动标签中使用这个属性来避免你的对话框出现在最近使用的应用列表中
android:excludeFromRecents="true"
如果您想在用户单击对话框外部时阻止您的对话框/活动被破坏:
在您的活动中使用 setContentView() 之后:
this.setFinishOnTouchOutside(false);
现在,当我调用 startActivity() 时,它会显示为一个对话框,当用户按下后退按钮时会显示上一个活动。
请注意,如果您使用的是 ActionBarActivity(或 AppCompat 主题),则需要改用 @style/Theme.AppCompat.Dialog。
推荐阅读
- haskell - 在单例数据类型中使用 Nat/Natural 的正确方法是什么?
- javascript - 打开模态的问题
- c++ - 如何修复 ld: symbol(s) not found for architecture x86_64?
- reactjs - 如何允许快速后端 REST API 在使用 axios 的反应前端中设置 cookie?
- python - 有没有办法检查生成列表中的单词是否在文本文件中?
- prolog - Prolog中发生检查的最坏情况是什么?
- android - 将 OnClick 侦听器从超级片段分配给新活动
- node.js - 尽管路径已填充,但 Mongoose 填充()返回未定义
- sql - Node.js express 和 postgress sql pool.query
- discord - 当用户对消息做出反应时,如何将值存储到变量中?