CollapsingToolbarLayout折叠后标题显示异常问题求助
我看你碰到了CollapsingToolbarLayout折叠后标题“T. My tanatory”显示异常的问题,结合你的XML代码,我帮你分析下核心原因和可行的解决方案:
核心问题分析
你的布局里没有给CollapsingToolbarLayout本身设置标题,如果是直接给Toolbar设置标题的话,会导致折叠状态下的标题管理混乱——因为CollapsingToolbarLayout在折叠/展开两种状态下的标题样式、位置是由它自己管控的,Toolbar的标题会被覆盖或者出现错位。另外,多层fitsSystemWindows的设置也可能干扰布局计算。
具体解决方案
下面是几个针对性的调整方向,你可以按顺序尝试:
给CollapsingToolbarLayout绑定标题并配置折叠状态样式
直接在CollapsingToolbarLayout中添加标题属性,同时可以自定义折叠时的标题外观,避免显示错位或样式异常:app:title="T. My tanatory" app:collapsedTitleTextAppearance="@style/CollapsedToolbarTitle"然后在
styles.xml中定义对应的折叠标题样式(如果不需要自定义,也可以用系统默认样式,但自定义更灵活):<style name="CollapsedToolbarTitle" parent="@android:style/TextAppearance.Medium"> <item name="android:textColor">@android:color/white</item> <item name="android:textSize">18sp</item> <item name="android:paddingStart">16dp</item> </style>调整Toolbar的边距避免与返回按钮重叠
给Toolbar添加contentInsetStart属性,确保折叠后标题不会和左侧返回按钮挤在一起:<android.support.v7.widget.Toolbar android:id="@+id/myToolbar" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:navigationIcon="@drawable/ic_arrow_back_white_24dp" app:layout_collapseMode="pin" app:contentInsetStart="16dp"/> <!-- 添加这个属性调整边距 -->清理重复的fitsSystemWindows设置
你的布局里多个控件都加了android:fitsSystemWindows="true",容易导致布局计算冲突。建议只保留最外层CoordinatorLayout和AppBarLayout的该属性,移除ImageView和CollapsingToolbarLayout的对应设置:<!-- 移除ImageView的fitsSystemWindows --> <ImageView android:id="@+id/iv_tanatorio" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/t_tanatory" android:scaleType="centerCrop" app:layout_collapseMode="parallax"/> <!-- 移除CollapsingToolbarLayout的fitsSystemWindows --> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:contentScrim="?android:attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp" app:title="T. My tanatory" app:collapsedTitleTextAppearance="@style/CollapsedToolbarTitle">
修改后的完整XML示例
<?xml version="1.0" encoding="utf-8"?> <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/main_content" 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="256dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" android:fitsSystemWindows="true"> <android.support.design.widget.CollapsingToolbarLayout android:id="@+id/collapsing_toolbar" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_scrollFlags="scroll|exitUntilCollapsed" app:contentScrim="?android:attr/colorPrimary" app:expandedTitleMarginStart="48dp" app:expandedTitleMarginEnd="64dp" app:title="T. My tanatory" app:collapsedTitleTextAppearance="@style/CollapsedToolbarTitle"> <ImageView android:id="@+id/iv_tanatorio" android:layout_width="match_parent" android:layout_height="wrap_content" android:src="@drawable/t_tanatory" android:scaleType="centerCrop" app:layout_collapseMode="parallax"/> <android.support.v7.widget.Toolbar android:id="@+id/myToolbar" android:layout_width="match_parent" android:layout_height="?android:attr/actionBarSize" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" app:navigationIcon="@drawable/ic_arrow_back_white_24dp" app:layout_collapseMode="pin" app:contentInsetStart="16dp"/> </android.support.design.widget.CollapsingToolbarLayout> </android.support.design.widget.AppBarLayout> <android.support.v7.widget.RecyclerView android:id="@+id/rv_tanatosalas" android:layout_width="match_parent" android:layout_height="match_parent" app:layout_behavior="@string/appbar_scrolling_view_behavior"/> </android.support.design.widget.CoordinatorLayout>
最后注意:代码里不要用Toolbar.setTitle()设置标题,而是通过CollapsingToolbarLayout来设置,确保两种状态下的标题统一管理:
CollapsingToolbarLayout collapsingToolbar = findViewById(R.id.collapsing_toolbar); collapsingToolbar.setTitle("T. My tanatory");
这样调整后,折叠状态下的标题应该就能正常显示了,如果还有问题,可以检查下你的主题样式是否有干扰标题的配置项~
内容的提问来源于stack exchange,提问作者Ricardo

