Android Support库BottomNavigationView多版本显示异常(文字过大)求助
嘿,这个坑我之前踩过!你遇到的文字尺寸在多数设备上异常巨大的问题,根源是直接在主题里设置android:textSize的方式不对,Android Support库的BottomNavigationView有自己的文本样式规范,全局设置会打破它的适配逻辑。
问题分析
你当前的mydrawer主题直接设置了android:textSize,这会强制覆盖BottomNavigationView内部的文本大小规则,但这个规则在不同Android版本上的默认表现不一样——Android 6可能刚好兼容,但其他版本就会出现文字膨胀的问题。
正确解决方案
我们需要使用BottomNavigationView专属的文本样式属性,而不是全局的android:textSize,具体步骤如下:
- 创建针对BottomNavigationView的文本样式
在你的styles.xml里定义两个样式(分别对应激活和未激活状态的菜单项文字):
<!-- 激活状态的文字样式 --> <style name="BottomNavTextActive" parent="@style/TextAppearance.Design.BottomNavigation.Active"> <item name="android:textSize">14sp</item> </style> <!-- 未激活状态的文字样式 --> <style name="BottomNavTextInactive" parent="@style/TextAppearance.Design.BottomNavigation.Inactive"> <item name="android:textSize">14sp</item> </style>
这里继承Support库提供的默认样式,只修改我们需要的textSize,保留其他默认适配逻辑。
- 修改BottomNavigationView的布局代码
移除原来的app:theme="@style/mydrawer",替换成专属的文本样式属性:
<android.support.design.widget.BottomNavigationView android:id="@+id/navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:background="#fff" app:itemIconTint="@drawable/selector" app:itemTextColor="@drawable/selector" app:itemTextAppearanceActive="@style/BottomNavTextActive" app:itemTextAppearanceInactive="@style/BottomNavTextInactive" app:menu="@menu/bottom_navigation_items" />
可选优化:用主题统一管理
如果你想把这些样式封装到主题里,也可以创建一个专门的BottomNavigationView主题:
<style name="MyBottomNavTheme" parent="Theme.Design.Light.BottomNavigationView"> <item name="textAppearanceActive">@style/BottomNavTextActive</item> <item name="textAppearanceInactive">@style/BottomNavTextInactive</item> </style>
然后在布局里引用这个主题:
app:theme="@style/MyBottomNavTheme"
这样修改后,BottomNavigationView会遵循Support库的适配规则,在所有Android版本上都能正常显示14sp的文字大小啦~
内容的提问来源于stack exchange,提问作者j jones
相关产品推荐
相关产品推荐

