实现带视差效果的折叠工具栏时状态栏背景下移问题求助
解决CollapsingToolbarLayout快速滚动时状态栏背景下移的问题
我明白你想要实现类似Facebook个人资料页的折叠工具栏效果,现在遇到快速滚动NestedScrollView时状态栏背景下移的问题,这大概率是因为fitsSystemWindows属性的设置冲突或者不正确导致的,下面是具体的解决步骤:
步骤1:调整fitsSystemWindows的设置
- 移除
NestedScrollView的android:clipToPadding="false",这个属性会导致滚动时内容延伸到状态栏区域,引发绘制异常 - 只在最外层的
CoordinatorLayout和CollapsingToolbarLayout中保留android:fitsSystemWindows="true",移除AppBarLayout和内部ImageView的该属性,避免多层嵌套的适配冲突
步骤2:优化Toolbar的状态栏适配
确保你的主题已经设置了透明状态栏,比如在styles.xml中添加:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <!-- 其他主题属性 --> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:windowDrawsSystemBarBackgrounds">true</item> </style>
步骤3:修改后的完整布局代码
<?xml version="1.0" encoding="utf-8"?> <layout> <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/coordinator" android:layout_width="match_parent" android:layout_height="match_parent" android:fitsSystemWindows="true"> <android.support.design.widget.AppBarLayout android:id="@+id/appBar" android:layout_width="match_parent" android:layout_height="wrap_content" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing" android:layout_width="match_parent" android:layout_height="200dp" app:titleEnabled="false" android:fitsSystemWindows="true" app:contentScrim="@color/colorRedThemePrimary" app:layout_scrollFlags="scroll|exitUntilCollapsed"> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:scaleType="centerCrop" app:layout_collapseMode="parallax" android:src="@drawable/drawer_top_part"/> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:layout_collapseMode="pin" app:popupTheme="@style/ThemeOverlay.AppCompat.Light"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v4.widget.NestedScrollView android:id="@+id/scroll" android:layout_width="match_parent" android:layout_height="match_parent" android:fillViewport="true" android:overScrollMode="never" app:layout_behavior="@string/appbar_scrolling_view_behavior"> <TextView android:layout_width="match_parent" android:layout_height="wrap_content" android:text="@string/activity_rules_info_text"/> </android.support.v4.widget.NestedScrollView> </android.support.design.widget.CoordinatorLayout> </layout>
额外说明
这样修改后,快速滚动时状态栏的背景会跟随CollapsingToolbarLayout的折叠状态正确变化,不会出现下移的问题。原理是通过统一fitsSystemWindows的作用层级,让CoordinatorLayout和CollapsingToolbarLayout负责系统窗口的适配,避免多层嵌套导致的绘制混乱。
内容的提问来源于stack exchange,提问作者Draptol
相关产品推荐
相关产品推荐

