之前,要启用沉浸式全屏模式,您必须使用setSystemUiVisibility,如下所示:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
| View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
| View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
| View.SYSTEM_UI_FLAG_FULLSCREEN
| View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
Run Code Online (Sandbox Code Playgroud)
从 API 30 开始,它已被弃用,那么解决方法是什么?
假设我们有以下代码。它显示一个按钮,当用户单击它时,该按钮就会消失。
@Composable
fun ButtonThatDisappearsOnClick() {
var showButton by remember { mutableStateOf(true) }
if (showButton) {
Button(onClick = {
check(showButton) { "onClick shouldn't be called for a hidden button" } // !!!
showButton = false
}) {
Text("My button")
}
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑check如果用户快速单击按钮两次,上面的调用可能会失败:
shouldShowButton设置为false。由于可变状态下的值已更新,因此安排了重组。onClick函数将第二次触发,并且check调用将失败。我无法在实践中重现这一点,所以我想知道这种行为是否确实可能。
android race-condition kotlin android-jetpack-compose compose-recomposition