小编Leo*_*tev的帖子

Android 11 上的沉浸式全屏

之前,要启用沉浸式全屏模式,您必须使用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 开始,它已被弃用,那么解决方法是什么?

java android android-layout

23
推荐指数
5
解决办法
2万
查看次数

Jetpack Compose 重组竞争条件

假设我们有以下代码。它显示一个按钮,当用户单击它时,该按钮就会消失。

@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

5
推荐指数
1
解决办法
886
查看次数