如何将一个 DialogFragment 提升到另一个之上?

How to raise one DialogFragment above another?

假设我有几个对话片段显示以响应可以任何顺序到达的消息和事件。通常,最后显示的对话框将在顶部。 有没有办法在 现有对话片段 下显示对话片段,或者在显示对话片段后更改其 z 顺序?

我的应用程序一次显示多个对话框应该很少见,但它可能会发生。有一个特定的对话框,只要它可见,就应该始终位于顶部。

一个对话框创建一个应用程序子window。 Android 的 window 经理(WindowManagerService) automatically computes window's z-order depending on its type and stores it in WindowStatemLayer 字段。内部 Android 类 有权访问此字段并更改 window 的 z 顺序,但是这个 API 没有暴露给 Android SDK。所以似乎影响对话框的 z 顺序的唯一方法是重新创建它。

我上面写的所有内容都是对 Android 的源代码进行简短调查的结果,所以我可能是错的。也许有一些 hacky 方法可以使用反射和访问私有字段和方法来做你想做的事情。但我不确定尝试这样做是不是一个好主意。在我看来,最好只有一个对话框甚至 activity,并在其中管理片段。