Android底部导航栏新增Item后未选中项标题消失问题求助
底部导航栏添加新Item后未选中项标题消失问题
问题现象
为APP底部导航栏添加第4个Item后,所有未选中状态的Item标题全部消失;添加前(3个Item)导航栏显示正常。
添加新Item前的导航菜单XML代码
<item android:id="@+id/navigation_lessons" android:icon="@drawable/ic_nav_lessons" android:title="@string/lessons" /> <item android:id="@+id/navigation_simulator" android:icon="@drawable/ic_nav_simulator" android:title="@string/simulator" /> <item android:id="@+id/navigation_quiz" android:icon="@drawable/ic_nav_quiz" android:title="@string/quiz" />
添加新Item后的导航菜单XML代码
<item android:id="@+id/navigation_lessons" android:icon="@drawable/ic_nav_lessons" android:title="@string/lessons" /> <item android:id="@+id/navigation_simulator" android:icon="@drawable/ic_nav_simulator" android:title="@string/simulator" /> <item android:id="@+id/navigation_quiz" android:icon="@drawable/ic_nav_quiz" android:title="@string/quiz" /> <item android:id="@+id/navigation_settings" android:icon="@drawable/ic_nav_settings" android:title="@string/settings" />
自定义样式与颜色配置
添加新Item前后未修改配置,相关代码如下:
底部导航栏样式代码
<style name="ThemeOverlay.Custom.BottomNavigationView" parent="Widget.MaterialComponents.BottomNavigationView"> <item name="itemTextColor">@color/bottom_nav_light</item> <item name="itemIconTint">@color/bottom_nav_light</item> <item name="itemBackground">@color/colorPrimary</item> </style>
颜色状态列表代码(res/color/bottom_nav_light.xml)
<item android:state_checked="true" android:color="#000000" /> <item android:state_checked="false" android:color="#595959"/>
尝试通过代码修改标题颜色无效果,需明确问题原因及解决方式。
原因分析
这是Material Design BottomNavigationView的默认行为:当导航栏Item数量≥4个时,会自动启用labelVisibilityMode的默认值auto——未选中的Item会隐藏标题,仅显示图标;只有选中的Item才会同时展示图标与标题。
解决方法
要强制所有状态下的Item均显示标题,需将labelVisibilityMode设置为labeled,有两种实现方式:
1. XML布局中直接配置
在BottomNavigationView标签内添加属性:
app:labelVisibilityMode="labeled"
完整布局示例:
<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/bottom_navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" app:menu="@menu/your_bottom_nav_menu" app:theme="@style/ThemeOverlay.Custom.BottomNavigationView" app:labelVisibilityMode="labeled" />
2. 代码中动态设置
Java实现
BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation); bottomNav.setLabelVisibilityMode(LabelVisibilityMode.LABEL_VISIBILITY_LABELED);
Kotlin实现
val bottomNav = findViewById<BottomNavigationView>(R.id.bottom_navigation) bottomNav.labelVisibilityMode = LabelVisibilityMode.LABEL_VISIBILITY_LABELED
设置后,无论导航栏Item数量多少,所有状态的Item都会保持标题可见。
内容的提问来源于stack exchange,提问作者Squash
相关产品推荐
相关产品推荐

