最新版BottomNavigationView 3个以上图标不显示文字解决方法

既然遇到此问题,那么BottomNavigationView的作用就不多介绍了。

当图标小于等于3个时,显示的是图标加文字。

当图标大于3个时,显示图标和当前页的文字。

     

网上搜索使用反射的方法,修改BottomNavigationMenuView的shiftMode属性 https://www.jianshu.com/p/0ba25cc65889

遗憾的是我的代码中BottomNavigationItemView类并没有setShiftingMode方法

blob.png

进入到BottomNavigationMenuView类中查看onMeasure方法,发现这个版本中判断方法已经改为isShifting

blob.png

blob.png

由isShifting方法可见,当labelVisibilityMode==0时或按钮数大于3则位移,那么只要将labelVisibilityMode值设置为不是0和-1就可以了。回到BottomNavigationView类,可以使用setLabelVisibilityMode方法设置labelVisibilityMode值

blob.png

blob.png

在Activity中修改显示方式

blob.png

结果

Screenshot_2019-02-18-16-20-33.png

另外补充下我的AS版本为3.3.1。build.gradle的dependencies配置 

implementation 'com.android.support:design:28.0.0'

<think>嗯,用户想解决BottomNavigationView高度设置无效的问题。首先,我需要回忆一下BottomNavigationView的默认行为。根据引用[1],BottomNavigationView有默认的高度限制,通常是56dp,可能被内部样式固定了。所以直接设置layout_height可能起作用。 接下来,用户可能尝试过在XML中直接修改高度,但发现无效。这时候需要检查是否使用了正确的属性。引用[2]提到图片大小的问题,虽然直接相关,但说明BottomNavigationView的内部组件可能有固定尺寸。可能需要在代码中动态调整,或者通过自定义样式来覆盖默认值。 然后,考虑解决方案。引用[3]中的fitsSystemWindows属性可能影响布局,但这里主要关注高度。正确的做法可能是创建一个自定义样式,修改itemHeight属性。例如,在styles.xml中定义一个新样式,继承自Widget.Design.BottomNavigationView,并设置itemHeight为所需值。这应该覆盖默认的高度设置。 另外,可能还需要检查是否有父布局的限制,比如ConstraintLayout中的约束是否正确。如果父布局限制了BottomNavigationView的高度,即使设置了也可能无效。需要确保父布局允许子视图调整高度。 最后,用户可能需要代码示例。应该提供一个修改样式的步骤,然后在XML中应用这个样式。同时提醒用户注意兼容性,比如同版本的Material Design库可能有同的属性名称。如果问题依旧,可能需要检查库版本或尝试其他方法,如自定义View继承BottomNavigationView并重写onMeasure方法。</think>### 自定义 BottomNavigationView 高度的解决方案 #### 问题原因分析 1. **默认高度限制**:`BottomNavigationView` 默认高度由 Material Design 规范定义为 $56dp$,其内部样式可能通过 `itemHeight` 属性强制限制高度[^1]。 2. **样式覆盖足**:直接设置 `android:layout_height` 可能被内置样式覆盖。 3. **版本兼容性**:同版本的 Material Design 库对属性支持存在差异。 #### 分步解决方案 1. **通过样式覆盖(推荐)** 在 `styles.xml` 中定义自定义样式: ```xml <style name="CustomBottomNavigation" parent="Widget.Design.BottomNavigationView"> <item name="itemHeight">@dimen/custom_nav_height</item> </style> ``` 然后在布局文件中应用: ```xml <com.google.android.material.bottomnavigation.BottomNavigationView android:layout_width="match_parent" android:layout_height="wrap_content" style="@style/CustomBottomNavigation"/> ``` 2. **动态代码调整** 若样式覆盖无效,可在代码中强制修改: ```java BottomNavigationView navView = findViewById(R.id.nav_view); ViewGroup.LayoutParams params = navView.getLayoutParams(); params.height = getResources().getDimensionPixelSize(R.dimen.custom_nav_height); navView.setLayoutParams(params); ``` 3. **检查父布局约束** 确保父容器未限制高度,如使用 `ConstraintLayout` 时: ```xml <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="0dp" android:layout_height="60dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent"/> </androidx.constraintlayout.widget.ConstraintLayout> ``` #### 注意事项 - 高度值建议低于 $56dp$ 以保证触控区域 - 修改后需检查图标文字的垂直居中效果 - 使用最新版 Material Design 库(1.5.0+)
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值