为方便使用,许多内置 Material 3 可组合项
(androidx.compose.material3)
会根据可组合项在应用中的放置方式
(按照 Material 规范)自行处理边衬区。
边衬区处理可组合项
以下是会自动处理边衬区的 Material Components 的列表。
应用栏
TopAppBar/SmallTopAppBar/CenterAlignedTopAppBar/MediumTopAppBar/LargeTopAppBar:将系统栏的顶部和水平边用作内边距,因为此组件会在窗口顶部使用。BottomAppBar:将系统栏的底部和水平边用作内边距。
内容容器
ModalDrawerSheet/DismissibleDrawerSheet/PermanentDrawerSheet(模态导航抽屉式导航栏内的内容):将垂直和起始边衬区应用于内容。ModalBottomSheet: 应用底部边衬区。NavigationBar:应用底部和水平边衬区。NavigationRail:应用垂直和起始边衬区。
Scaffold
默认情况下,Scaffold 提供边衬区作为参数 PaddingValues,供您使用。
Scaffold 不会将边衬区应用于内容;这需要您自行负责。
例如,如需在 Scaffold 内使用 LazyColumn 来使用这些边衬区,请执行以下操作:
Scaffold { innerPadding -> // innerPadding contains inset information for you to use and apply LazyColumn( // consume insets as scaffold doesn't do it by default modifier = Modifier.consumeWindowInsets(innerPadding), contentPadding = innerPadding ) { // .. } }
以下视频展示了在停用和启用边缘到边缘显示的情况下,Scaffold 内的 LazyColumn:
通常,在 Scaffold 中使用 PaddingValues 参数就足以将界面从系统界面和显示屏凹口处内嵌。如果使用
Scaffold,请避免使用其他边衬区处理方法(例如标尺、内边距修饰符或边衬区大小修饰符),以避免向界面应用过多内边距。
替换默认边衬区
您可以更改传递给可组合项的 windowInsets 参数,以配置可组合项的行为。此参数可以是要应用的另一种
窗口边衬区类型,也可以通过传递空实例来停用:
WindowInsets(0, 0, 0, 0)。
例如,如需停用
LargeTopAppBar上的边衬区处理,
请将 windowInsets 参数设置为一个空实例:
LargeTopAppBar( windowInsets = WindowInsets(0, 0, 0, 0), title = { Text("Hi") } )