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
相关产品推荐
相关产品推荐

