gpt4 book ai didi

android - 以沉浸式模式显示 BottomSheetDialogFragment

转载 作者:行者123 更新时间:2023-11-29 23:06:11 32 4
gpt4 key购买 nike

我想在沉浸式模式下显示 BottomSheetDialogFragment。最初导航和状态栏会在显示对话框时显示,但我可以使用下面的代码对其进行排序。但是,当显示或关闭对话框时,导航栏会瞬间闪烁。有没有一种方法可以让 BottomSheetDialogFragment 完全身临其境,而导航栏不会在显示和关闭时闪烁?

abstract class ImmersiveBottomSheetDialogFragment<T : ViewDataBinding> : BottomSheetDialogFragment() {

protected lateinit var binding: T

private val systemUiVisibility: Int = (View.SYSTEM_UI_FLAG_LAYOUT_STABLE
or View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
or View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
or View.SYSTEM_UI_FLAG_FULLSCREEN
or View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY)

fun showImmersive(
fragmentManager: FragmentManager,
tag: String,
tapOutsideEnabled: Boolean = false
) {
show(fragmentManager, tag)
fragmentManager.executePendingTransactions()
dialog?.let { dialog ->
dialog.setCanceledOnTouchOutside(tapOutsideEnabled)
dialog.window?.let { window ->
window.decorView.systemUiVisibility = systemUiVisibility
window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
}
}
}
}

最佳答案

添加这个:

override fun setupDialog(dialog: Dialog?, style: Int) {
super.setupDialog(dialog, style)
dialog?.window?.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
}

( from )

同时添加:

override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
var viewParent = view
while (viewParent is View) {
viewParent.fitsSystemWindows = false
viewParent.setOnApplyWindowInsetsListener { _, insets -> insets }
viewParent = viewParent.parent as View?
}
}

这是做什么的? DialogFragment#onActivityCreated() 调用 Dialog#setContentView(),它将对话框的 View 包装在私有(private)的“wrapInBottomSheet”中。为了设置这些包装器 View 的正确标志,我们希望在它们被包装后设置标志,例如在 super.onActivityCreated() 之后

同时观看 this talk有关 fitsSystemWindows 和窗口插图的信息。

关于android - 以沉浸式模式显示 BottomSheetDialogFragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56487653/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com