android 框架中PaddingValues参数的用途是什么

vm0i2vca  于 2023-02-17  发布在  Android
关注(0)|答案(2)|浏览(295)
@Composable
fun LayoutsCodelab() {
    Scaffold(
        topBar = {
            TopAppBar(
                title = {
                    Text(text = "LayoutsCodelab")
                }
            )
        }
    ) { innerPadding ->
        BodyContent(Modifier.padding(innerPadding))
    }
}

删除innerPadding不会更改任何内容。
请注意,我是编写的新手。
如果您有任何困惑,请在评论中提出

mdfafbf1

mdfafbf11#

提供给内容的填充值只有在设置bottomBar参数时才能设置。遗憾的是,这没有文档记录。如果设置bottomBar,则Scaffold会将PaddingValues的底部填充设置为bottomBar内容使用的内容高度。其他填充值(start、top、end)当前设置为零。不确定将来是否会更改。
如果您的内容包含可滚动列表,并且您希望将列表底部偏移bottomBar内容的高度,则提供底部填充非常有用。如果不包括任何bottomBar内容,则PaddingValues将始终保持设置为零。
下面的示例显示了在bottomBar使用BottomAppBar时如何将PaddingValues参数传递到内容中。它显示了一个包含50个项目的列表。将填充添加到列后,可以滚动到底部并查看最后一个项目。如果删除列的填充并重复测试,则在滚动到底部时,最后几项不可见,因为Column一直延伸到脚手架底部,没有任何底部填充,并且底部应用程序栏覆盖了最后几项:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        startActivity(intent)

        setContent {

            Scaffold(
                topBar = {
                    TopAppBar(
                        title = {
                            Text(text = "Padding values in a scaffold")
                        }
                    )
                },
                bottomBar = {
                    BottomAppBar() {
                        CompositionLocalProvider(LocalContentAlpha provides ContentAlpha.high) {
                            IconButton(onClick = { /* doSomething() */ }) {
                                Icon(Icons.Filled.Menu, contentDescription = "Localized description")
                            }
                        }
                        Spacer(Modifier.weight(1f, true))
                        IconButton(onClick = { /* doSomething() */ }) {
                            Icon(Icons.Filled.Favorite, contentDescription = "Localized description")
                        }
                        IconButton(onClick = { /* doSomething() */ }) {
                            Icon(Icons.Filled.Favorite, contentDescription = "Localized description")
                        }
                    }
                }
            ) { paddingValues ->
                Column(modifier = Modifier
                    .fillMaxSize()
                    .padding(bottom = paddingValues.calculateBottomPadding())
                    .verticalScroll(rememberScrollState())) {

                    Text("Bottom app bar padding:  $paddingValues")

                    repeat(50) {
                        Text(it.toString())
                    }
                }
            }
        }
    }
}

我不明白谷歌为什么不包含顶部填充。毕竟,如果包含顶部应用栏,它也会占用空间。我认为原因与顶部应用栏的折叠有关。如果顶部应用栏在滚动时折叠,内容区域需要扩展--所以在顶部添加填充可能没有意义。但如果顶部应用栏保持不变,它确实有意义。

63lcw9qa

63lcw9qa2#

根据文件
contentlambda接收PaddingValues的示例,该示例应该应用于内容根-例如,通过Modifier.padding -以偏移顶部和底部条(如果它们存在的话)。

相关问题