我有一个DialogFragment
,它显示在某个位置,它表示解锁应用程序访问权限的引脚请求。
在我的应用程序中有一个场景,我启动了一个活动,如果满足某些条件,它会显示DialogFragment
(从 BaseActivity 启动(要求一个引脚,但与此同时,Activity A
启动另一个Activity B
,DialogFragment
落后于它。
事件的顺序是
1- 活动 A 已启动
2-显示对话片段
3-活动A启动活动B,对话片段落后。
我想将DialogFragment
放在所有内容之前,即使在片段出现后启动新活动也是如此。
companion object {
fun newInstance(cancelable: Boolean = false): LockCodeFragment {
val frag = PinCodeFragment()
frag.isCancelable = cancelable
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
frag.dialog?.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
frag.dialog?.window?.setFlags(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
} else {
frag.dialog?.window?.setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
frag.dialog?.window?.setFlags(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT, WindowManager.LayoutParams.TYPE_SYSTEM_ALERT)
}
return frag
}
当我实例化片段时,我试图将对话框设置为具有系统警报或应用程序覆盖类型,但没有成功。
有没有办法让DiaglogFragment
在一切面前保持?
正如我在评论中所说,据我所知,这是不可能的,因为片段由每个活动唯一的FragmentManager
管理。我认为你能做的最好的事情就是记住该片段是否显示在某处(使用 SharedPreferences
甚至是 Application
子类中的字段(,然后,当另一个活动开始时,检查该值以可能再次显示对话框。
view.bringToFront()
使视图出现在前面
- 创建基本活动。
- 在基本活动中添加对话框显示条件
- 使用 BaseActivity 扩展所有其他活动。
- 阻止对话框关闭,如下所示
要防止对话框在按下后退键时关闭,请使用此
dialog.setCancelable(false);
为了防止对话框在外部触摸时被关闭,请使用这个
dialog.setCanceledOnTouchOutside(false);