You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetpack Compose:滚动时无法保持CenterAlignedTopAppBar颜色恒定

Jetpack Compose:滚动时无法保持CenterAlignedTopAppBar颜色恒定

我太懂你这种糟心的感觉了——明明设置了TopAppBar的容器颜色,结果一滚动就变样,完全不是想要的效果!问题其实出在你没覆盖滚动状态下的颜色参数。

默认情况下,当你给CenterAlignedTopAppBar绑定pinnedScrollBehavior后,滚动过程中Compose会自动切换到scrolledContainerColor这个参数对应的颜色,而这个参数的默认值和你设置的containerColor可能并不一致(哪怕用的是主题色,滚动状态下的默认处理也会有差异)。

解决方法很简单,只需要在centerAlignedTopAppBarColors里把scrolledContainerColor也设置成和containerColor一样的值就行:

val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())

Scaffold(
    modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
    topBar = {
        CenterAlignedTopAppBar(
            title = {},
            modifier = Modifier.wrapContentHeight(),
            colors = TopAppBarDefaults.centerAlignedTopAppBarColors(
                containerColor = MaterialTheme.colorScheme.surface,
                scrolledContainerColor = MaterialTheme.colorScheme.surface // 关键:设置滚动时的颜色和静止时一致
            ),
            scrollBehavior = scrollBehavior,
        )
    },
) { innerPadding ->
    // 这里放你的页面内容,记得用innerPadding处理内边距哦
}

这样调整之后,不管是静止状态还是滚动过程中,TopAppBar的颜色都会牢牢保持你设置的surface色,不会再出现莫名切换的情况啦。如果之后你想让滚动时的颜色有不同效果,也可以单独修改scrolledContainerColor的值来实现。

备注:内容来源于stack exchange,提问作者mml ch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 08:34:29