我有一个片段,我在其中设置了 ComposeView。我正在检查根视图和 Compose 的系统导航插图,如下所示:
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?,
): View {
return ComposeView(requireContext()).apply {
setContent {
val compatWindowInsets = WindowInsetsCompat.toWindowInsetsCompat(view?.rootWindowInsets!!, view)
val systemInsetTypesMask = WindowInsetsCompat.Type.navigationBars()
val viewSystemInsets = compatWindowInsets.getInsets(systemInsetTypesMask)
println("---> View: ${viewSystemInsets.bottom}")
val composeSystemInsets = WindowInsets.navigationBars
println("---> Compose: ${composeSystemInsets.getBottom(LocalDensity.current)}")
...
}
}
}
对于 Android API >= 30 我得到下一个结果:
---> View: 126
---> Compose: 126
但是对于 Android API < 30 I get:
---> View: 126
---> Compose: 0
对于 Compose 来说它总是为零,是什么原因导致的以及如何修复它?
我已经在 API 级别 27 和 33 的设备上测试了代码,并且两者的底部
navigationBars
插图都为 0。
事实证明,在 Activity onCreate
功能中启用
Edge-To-Edge后,撰写插图在两个设备上都可以正常工作。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Enable Edge-To-Edge in [androidx.activity] version >= 1.8
enableEdgeToEdge()
// Enable Edge-To-Edge in [androidx.activity] version < 1.8
WindowCompat.setDecorFitsSystemWindows(window, false)
/// ...
}