将对话片段放在所有活动的前面(即使是在显示对话片段后创建的活动)



我有一个DialogFragment,它显示在某个位置,它表示解锁应用程序访问权限的引脚请求。

在我的应用程序中有一个场景,我启动了一个活动,如果满足某些条件,它会显示DialogFragment(从 BaseActivity 启动(要求一个引脚,但与此同时,Activity A启动另一个Activity BDialogFragment落后于它。

事件的顺序是

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()

使视图出现在前面

  1. 创建基本活动。
  2. 在基本活动中添加对话框显示条件
  3. 使用 BaseActivity 扩展所有其他活动。
  4. 阻止对话框关闭,如下所示

要防止对话框在按下后退键时关闭,请使用此

dialog.setCancelable(false);

为了防止对话框在外部触摸时被关闭,请使用这个

dialog.setCanceledOnTouchOutside(false);

最新更新