You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BottomNavigationMenu首个菜单项禁用后样式不生效该如何解决?

问题根因

这个问题是两个因素共同导致的:

  1. BottomNavigationView默认会自动将菜单的第一个条目设为选中状态
  2. 你定义的颜色选择器(selector)的状态匹配顺序错误,state_checked的判断放在了state_enabled之前。Android的selector是按从上到下的顺序匹配状态的,只要匹配到符合的条目就会直接使用,不会继续往下判断。所以第一个已经被默认选中的条目,哪怕你设置了enabled=false,也会优先命中state_checked=true的样式,不会走禁用状态的配置。
    你其他禁用的菜单项默认不会被选中,所以可以正常触发禁用样式,和你遇到的现象完全吻合。

解决方案

方法1:调整selector的状态顺序(必选)

将禁用状态的判断放到selector的最顶部,保证禁用状态优先级最高,不管条目是否被选中,只要禁用就会优先使用禁用样式:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- 禁用状态放在最前面,优先级最高 -->
    <item android:color="#BEBEBE" android:state_enabled="false"/>
    <item android:color="@color/secondaryColor" android:state_checked="true"/>
    <item android:color="@color/secondaryColor" android:state_enabled="true"/>
</selector>

方法2:可选补充配置

如果你不需要第一个条目默认选中,可以额外添加代码手动设置默认选中项:

// 禁用第一个菜单
bottomNavigationView.getMenu().getItem(0).setEnabled(false);
// 手动指定你需要默认选中的项,比如第二个项item2
bottomNavigationView.setSelectedItemId(R.id.item2);

内容的提问来源于stack exchange,提问作者JavaForAndroid

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 03:48:02