android Compose:scaffold由于`WindowCompat.setDecorFitsSystemWindows(window,false)`导致的不必要的systemBar填充

izkcnapc  于 2023-04-10  发布在  Android
关注(0)|答案(1)|浏览(137)

我在一个edge 2 edge显示应用程序上工作时,遇到了一个关于scaffold的情况,根据official doc,scaffold padding值用于偏移顶部和底部条,如果它们存在。结果发现,当我使用scaffold而不提供top/bottom参数时,scaffold的内容会自动填充在顶部和底部的空白处
如果我为topBarbottomBar提供一个参数,另一个会自动填充空格。

**Catch:**仅当使用WindowCompat.setDecorFitsSystemWindows(window, false)时才会发生
代码段:

WindowCompat.setDecorFitsSystemWindows(window, false) //commenting this line of code gives desired results but defeates the E2E display

    setContent {
        TestTheme {
            Box(
                modifier = Modifier
                    .fillMaxSize()
                    .background(Color.Cyan)
            ) {
                Scaffold(
                    modifier = Modifier
                        .fillMaxSize(0.8f)
                        .align(Alignment.Center),

                    ) { paddingValues ->

                    Box(
                        modifier = Modifier
                            .padding(paddingValues)
                            .fillMaxSize()
                            .background(Color.White)
                    ) {

                        Log.d("scaffold", "padding values = $paddingValues")

                        Text("Android")
                    }

                }
            }

        }
    }

未评论:------评论:

**问:**请问,这种行为的原因是什么,以及我如何才能实现一个工作的E2 E与脚手架不添加不必要的填充?
开发工具:

最新Android Studio(电鳗)
androidx.compose.material3

zd287kbt

zd287kbt1#

有两个选项:

1.不使用Scaffold的paddingValues
1.将zero contentWindowInsets设置为Scaffold,如下所示:

Scaffold(
     contentWindowInsets = WindowInsets(0.dp), 
     ...
 ) {
     //Your content
 }

默认值为ScaffoldDefaults.contentWindowInsets,由WindowInsets.systemBars组成

相关问题