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

Android中CollapsingToolbar完全折叠时修改背景颜色的问题

解决CollapsingToolbar完全折叠时修改背景色的问题

你遇到的问题是判断折叠状态的条件写错了,导致完全折叠时的背景色修改逻辑没触发。咱们来一步步修正:

问题分析

你代码里的if (scrollRange == 0)完全不符合判断逻辑——scrollRange是AppBarLayout的总滚动范围,正常情况下它不会等于0。正确的判断应该是:当verticalOffset的绝对值等于scrollRange时,代表CollapsingToolbar已经完全折叠了。

修正后的代码

private void initCollapsingToolbar() {
    final CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar);
    AppBarLayout appBarLayout = findViewById(R.id.appbar);

    appBarLayout.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener() {
        @SuppressLint("ResourceAsColor")
        @Override
        public void onOffsetChanged(AppBarLayout appBarLayout, int verticalOffset) {
            int scrollRange = appBarLayout.getTotalScrollRange();
            // 当垂直偏移量的绝对值等于总滚动范围时,代表完全折叠
            if (Math.abs(verticalOffset) == scrollRange) {
                // 完全折叠时设置背景色
                toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.colorAccent));
            } else {
                // 未折叠/部分折叠时恢复原来的背景色(根据你的需求调整颜色值)
                toolbar.setBackgroundColor(ContextCompat.getColor(getApplicationContext(), R.color.original_toolbar_color));
            }
        }
    });
}

关键说明

  • scrollRange不需要初始化为-1再判断,直接调用appBarLayout.getTotalScrollRange()就能获取正确的总滚动范围
  • Math.abs(verticalOffset) == scrollRange是判断完全折叠的核心条件:因为向上滚动时verticalOffset为负数,取绝对值后和总滚动范围相等,就代表已经滚到顶部完全折叠了
  • 记得在else分支设置未折叠时的背景色,不然折叠后再展开颜色不会自动恢复

内容的提问来源于stack exchange,提问作者ahmed

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 03:56:10