Jetpack compose 来到前台时如何重构

Ara*_*ani 4 android-jetpack-compose

我想隐藏状态栏,并且我已经成功地使用伴奏库做到了这一点:

val systemUiController = rememberSystemUiController()
systemUiController.isStatusBarVisible = false
Run Code Online (Sandbox Code Playgroud)

问题是,当应用程序进入后台并进入前台时,这段代码不会运行,因此状态栏会再次显示。我该如何解决这个问题?

谢谢。

Phi*_*hov 9

您可以使用OnLifecycleEvent答案

val systemUiController = rememberSystemUiController()
OnLifecycleEvent { _, event ->
    when (event) {
        Lifecycle.Event.ON_RESUME,
        Lifecycle.Event.ON_START,
        -> {
            systemUiController.isStatusBarVisible = false
        }
        else -> Unit
    }
}
Run Code Online (Sandbox Code Playgroud)

OnLifecycleEvent

@Composable
fun OnLifecycleEvent(onEvent: (owner: LifecycleOwner, event: Lifecycle.Event) -> Unit) {
    val eventHandler = rememberUpdatedState(onEvent)
    val lifecycleOwner = rememberUpdatedState(LocalLifecycleOwner.current)

    DisposableEffect(lifecycleOwner.value) {
        val lifecycle = lifecycleOwner.value.lifecycle
        val observer = LifecycleEventObserver { owner, event ->
            eventHandler.value(owner, event)
        }

        lifecycle.addObserver(observer)
        onDispose {
            lifecycle.removeObserver(observer)
        }
    }
}
Run Code Online (Sandbox Code Playgroud)