Jetpack Compose for Android API 中的零系统导航插入 < 30

问题描述 投票:0回答:1

我有一个片段,我在其中设置了 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 来说它总是为零,是什么原因导致的以及如何修复它?

android kotlin android-jetpack-compose android-jetpack
1个回答
0
投票

我已经在 API 级别 27 和 33 的设备上测试了代码,并且两者的底部

navigationBars
插图都为 0。

事实证明,在 Activity onCreate 功能中启用

Edge-To-Edge
后,撰写插图在两个设备上都可以正常工作。

这里是 Compose 中窗口插入的详细文档。

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) /// ... }
    
© www.soinside.com 2019 - 2024. All rights reserved.