为便于使用,许多内置的 Material 3 可组合项(androidx.compose.material3
)会根据可组合项在应用中放置的位置,按照 Material 规范自行处理窗口边衬区。
窗口边衬区处理可组合项
以下是自动处理窗口边衬区的 Material 组件列表。
应用栏
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
的效果
覆盖默认窗口边衬区
您可以更改传递给可组合项的 windowInsets
参数,以配置可组合项的行为。此参数可以是要应用的另一种窗口边衬区类型,或者通过传递空实例 WindowInsets(0, 0, 0, 0)
来禁用。
例如,要在 LargeTopAppBar
上禁用窗口边衬区处理,请将 windowInsets
参数设置为空实例
LargeTopAppBar( windowInsets = WindowInsets(0, 0, 0, 0), title = { Text("Hi") } )