Android Studio中TabLayout首个标签字体大小与其他标签不一致问题
问题分析:TabLayout首个标签字体大小异常(系统超大字体下)
环境配置
- Android Studio 3.1
- Gradle 4.1
- Java 1.8
- 目标Android版本:6.0
- 系统字体设置:超大
相关代码
布局代码
<android.support.design.widget.TabLayout android:id="@+id/tabLayout" style="@style/TabLayoutStyle" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="@dimen/tile_preview_margin" android:layout_marginLeft="@dimen/tile_preview_margin" android:layout_marginRight="@dimen/tile_preview_margin" android:layout_marginStart="@dimen/tile_preview_margin" android:background="@android:color/white" android:minHeight="@dimen/standard_min_height_container" android:textAlignment="center" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toBottomOf="@+id/searchViewContainer" app:tabGravity="fill" app:tabIndicatorColor="@color/colorPrimaryDark" app:tabIndicatorHeight="2dp" app:tabMode="fixed" app:tabSelectedTextColor="@color/colorPrimaryDark" />
styles.xml代码
<style name="TabLayoutStyle" parent="Base.Widget.Design.TabLayout"> <item name="tabTextAppearance">@style/TabLayoutTextAppearanceStyle</item> </style> <style name="TabLayoutTextAppearanceStyle" parent="TextAppearance.AppCompat.Button"> <item name="android:textSize">20sp</item> <item name="android:textColor">@color/tabTextColor</item> <item name="android:textAllCaps">false</item> <item name="android:textStyle">bold</item> </style>
现象
首个标签(Brands)的字体大小与其他标签不一致
原因解析
我之前在老版本Support库的项目里碰到过一模一样的问题,结合你的环境和代码来看,根源是早期Android Design Support库的TabLayout在系统大字体缩放场景下的渲染bug,具体拆解下:
- 你用的是
android.support.design.widget.TabLayout,对应你AS3.1+Gradle4.1的环境,大概率依赖的是27.x及以下版本的Support库。这个版本的TabLayout在Android 6.0系统配合超大字体缩放时,存在一个逻辑漏洞:第一个加载的标签(也就是你的"Brands"标签)不会正确应用自定义tabTextAppearance里的textSize设置,反而会直接使用系统字体缩放后的尺寸;而后续的标签则能正常读取你设置的20sp,这就导致了字体大小不一致。 - 另外,你把
TextAppearance.AppCompat.Button作为文本样式的父类,这个父样式本身带有默认的文本尺寸属性,在系统字体缩放的场景下,首个标签的样式优先级处理出现了偏差——它没有按照预期用你自定义的20sp去覆盖系统缩放后的大小,反而继承了系统放大后的尺寸,和其他标签形成了差异。 - 补充一点:sp单位本身是会跟随系统字体缩放的,但你这里的问题不是sp的特性导致的,而是TabLayout对首个标签的文本尺寸计算逻辑有问题,没有正确应用自定义样式的配置。
内容的提问来源于stack exchange,提问作者user8542613
相关产品推荐
相关产品推荐

