使用 DialogFragment 和导航库时将对话框显示为全屏或对话框

Posted

技术标签:

【中文标题】使用 DialogFragment 和导航库时将对话框显示为全屏或对话框【英文标题】:Show dialog as full screen or as dialog when using DialogFragment and Navigation Library 【发布时间】:2020-04-25 07:38:57 【问题描述】:

我有一个 DialogFragment,它由一个搜索 EditText 和一个 RecyclerView 组成。当你点击一个搜索项时,对话框被关闭,选中的项被添加到父片段的另一个列表中。

我使用导航控制器在片段之间导航。此 DialogFragment 当前在导航图 XML 中使用 fragment 标记定义。我使用findNavController().navigate(destinationId) 打开它并使用findNavController().popBackStack() 关闭它。

我想在平板电脑中将其显示为对话框,在移动设备上显示为全屏,但未能如愿。

我尝试创建一个自定义对话框主题,其父级为Theme.MaterialComponents.DayNight.DialogWhenLarge,并在应用主题中将其设置为dialogTheme,但它会覆盖应用主题中的属性,例如状态栏颜色。我还尝试了这里提出的问题中提供的许多解决方案。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

当我在主题中使用 Diologs 设置属性时,它们会全屏显示

<style name="NotificationDialogTheme" parent="android:Theme.Holo.Dialog">
    <item name="android:windowMinWidthMajor">100%</item>
    <item name="android:windowMinWidthMinor">100%</item>
</style>

【讨论】:

以上是关于使用 DialogFragment 和导航库时将对话框显示为全屏或对话框的主要内容,如果未能解决你的问题,请参考以下文章

导航到 Jetpack Navigation 中的另一个 Fragment 后将 DialogFragment 保留在 backstack 中

导航架构组件 - 对话框片段

如何将对对象的引用传递给包含在导航控制器中的模态呈现的视图控制器?

在 DialogFragment 中使用 FragmentManager 和 FragmentTransaction

使用 DialogFragment 创建对话框

DialogFragment 优于 AlertDialog [重复]