在撰写中获取状态栏高度的正确方法是什么?

ura*_*reo 11 android android-jetpack-compose

通常,当使用伴奏时Modifier.statusBarsHeight(),高度将根据状态栏的可见性而变化,如果它可见,则为24.dp或更高,如果它不可见,则高度将为0.dp。但我希望无论其可见性如何,高度都不会变为零。

我已经使用这个有一段时间了:

// TODO: use better solution to get a fixed status bar height
val statusBarHeight = with (LocalDensity.current) { LocalWindowInsets.current.statusBars.top.toDp() }
val fixedStatusBarHeight = remember { statusBarHeight }
Run Code Online (Sandbox Code Playgroud)

Mr.*_*mon 32

问题变得复杂你应该像这样使用它

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Box(
                modifier = Modifier
                    .fillMaxSize()
                    .statusBarsPadding().navigationBarsPadding()
            ) {

            }

            Box(
                modifier = Modifier
                    .fillMaxSize()
                    .statusBarsPadding().systemBarsPadding()
            ) {

            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


小智 3

目前,有一个 ExperimentalLayoutApi 提供了statusBarsIgnoringVisibility.

示例用例:

我有两个屏幕,A 和 B。屏幕 A 用于statusBarsIgnoringVisibility顶部填充。在屏幕 B 中,您可以隐藏状态栏(例如,全屏照片)。当从屏幕 B 转到屏幕 A 时,我希望当状态栏返回视图时,屏幕 A 中的顶部填充已经等于状态栏的整个高度。如果没有statusBarsIgnoringVisibility,这种转变看起来不太好。