首页 > 解决方案 > 显示 AlertDialog 时暂停活动

问题描述

我知道,由于AlertDialog是演示的一部分,Activity因此显示它不会触发OnPause. Activity我想要实现的是展示AlertDialog并以某种方式触发OnPause呈现Activity

OnResume我设置OnGlobalLayoutListener为根据键盘是否可见来调整滚动视图的位置。但是,如果 anAlertDialog是可见的,那么继续监听布局更改并相应地调整滚动视图可能没有意义,考虑到“焦点”当前位于AlertDialog并且Activity在背景中部分可见。

我知道我可以以“弹出”样式开始活动,但这不是我想要的;我想用AlertDialog.

标签: androidandroid-layoutandroid-alertdialog

解决方案


使用另一个活动作为对话框。然后它会自动暂停您当前的活动。要以对话框形式启动活动,我在 AndroidManifest.xml 中这样定义它:

<activity android:theme="@android:style/Theme.Dialog" />

在你的活动标签中使用这个属性来避免你的对话框出现在最近使用的应用列表中

android:excludeFromRecents="true"

如果您想在用户单击对话框外部时阻止您的对话框/活动被破坏:

在您的活动中使用 setContentView() 之后:

this.setFinishOnTouchOutside(false);

现在,当我调用 startActivity() 时,它会显示为一个对话框,当用户按下后退按钮时会显示上一个活动。

请注意,如果您使用的是 ActionBarActivity(或 AppCompat 主题),则需要改用 @style/Theme.AppCompat.Dialog。


推荐阅读