【问题标题】:Jetpack Compose: Top app bar scroll behavior not changing status bar colorJetpack Compose:顶部应用栏滚动行为不会改变状态栏颜色
【发布时间】:2022-11-26 19:06:24
【问题描述】:

我已经实现了pinned top app bar scroll container,它可以改变滚动时的app bar颜色,但是状态栏颜色完全不受影响。

这是我所拥有的:

val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())

Scaffold(
    Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
    topBar = {
        // just a wrapper for CenterAlignedTopAppBar
        StandardTopAppBar("Home", scrollBehavior = scrollBehavior)
    }
){ ... }

如果相关,为了检测软键盘是否存在,我启用了:

WindowCompat.setDecorFitsSystemWindows(window, false)

我的状态栏颜色最初设置在我的Theme。当我在 android studios 中自动生成项目时,它被设置为原色,但我将其更改为表面颜色以匹配应用栏标准:

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
        }
    }

TL;博士;滚动时顶部应用栏的颜色会发生变化,但状态栏不会。在这里使用的正确模式是什么?我查看了一些 pinnedScrollBehavior 代码,但没有看到任何会调用状态栏更改的内容,所以我想知道我是否应该让状态栏透明并更改应用栏的插图?或者我应该手动挂钩滚动逻辑并自己更改颜色?任何帮助表示赞赏!

【问题讨论】:

    标签: android-jetpack-compose android-jetpack-compose-material3


    【解决方案1】:

    Theme.kt中,在运行setContent()之前调用window.setDecorFitsSystemWindows(false)函数。

    这样做将在状态栏和导航栏下方显示内容。

    现在将状态栏和导航栏颜色设置为 Color.Transparent。

    您还需要确保使用从 Scaffold() 可组合项的回调中传递的填充值正确设置了 Scaffold() 的直接子项的填充值。

    【讨论】:

      猜你喜欢
      • 2022-08-08
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-13
      • 1970-01-01
      相关资源
      最近更新 更多