Nat*_*han 4 android-jetpack-compose android-jetpack-compose-material3
我已经实施了pinned顶部应用程序栏滚动容器,它适用于更改滚动时的应用程序栏颜色,但状态栏颜色根本不受影响。
这是我所拥有的:
val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
Scaffold(
Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
topBar = {
// just a wrapper for CenterAlignedTopAppBar
StandardTopAppBar("Home", scrollBehavior = scrollBehavior)
}
){ ... }
Run Code Online (Sandbox Code Playgroud)
如果相关,为了检测软键盘是否存在,我启用了:
WindowCompat.setDecorFitsSystemWindows(window, false)
Run Code Online (Sandbox Code Playgroud)
我的状态栏颜色最初在我的Theme. 当我在 android studio 中自动生成项目时,它被设置为原色,但我将其更改为表面颜色以匹配应用程序栏标准:
if (!view.isInEditMode) {
SideEffect {
(view.context as Activity).window.statusBarColor = colorScheme.surface.toArgb()
//(view.context as Activity).window.statusBarColor = colorScheme.primary.toArgb()
ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = !darkTheme // changed from just darkTheme
}
}
Run Code Online (Sandbox Code Playgroud)
太长;博士;顶部应用栏颜色在滚动时会发生变化,但状态栏不会。这里使用的正确模式是什么?我查看了一些代码pinnedScrollBehavior,没有看到任何会调用状态栏更改的内容,所以我想知道是否应该使状态栏透明并更改应用程序栏的插图?或者我应该手动连接滚动逻辑并自己更改颜色?任何帮助表示赞赏!
在 中Theme.kt,在YourAppTheme()函数内添加。
WindowCompat.setDecorFitsSystemWindows(window, false)
Run Code Online (Sandbox Code Playgroud)
执行此操作将在 StatusBar 和 NavigationBar* 下面显示内容( 仅适用于旧版本的 Jetpack Compose。在较新的版本中,PaddingValues 默认设置正确。)。
现在将 StatusBar 和 NavigationBar 颜色设置为 Color.Transparent。
// make sure to use the compose color package, not the default one
import androidx.compose.ui.graphics.Color
window.statusBarColor = Color.Transparent.toArgb()
window.navigationBarColor = Color.Transparent.toArgb()
Run Code Online (Sandbox Code Playgroud)
您还需要确保Scaffold()使用从可组合项的回调中传递的填充值正确设置 的直接子级的填充值Scaffold()。
为主题设置正确的颜色StatusBar和图标颜色。NavigationBar
WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightStatusBars = !darkTheme
WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightNavigationBars = !darkTheme
Run Code Online (Sandbox Code Playgroud)
如果您使用ModalBottomSheetLayout或BottomSheetScaffold,您还需要在 BottomSheet 可组合项中设置 Insets,以防止NavigationBar使用重叠应用程序内容,
Modifier.windowInsetsPadding(WindowInsets.navigationBars)
Run Code Online (Sandbox Code Playgroud)
编辑
在 Material3 中,window.setDecorFitsSystemWindows()仅兼容 > API 级别 30。
用于WindowCompat.setDecorFitsSystemWindows(window, false)向后兼容。
| 归档时间: |
|
| 查看次数: |
2030 次 |
| 最近记录: |