NavigationView选中项颜色异常:双DrawerLayout布局表现不一致
你遇到的这个问题确实挺棘手的——明明都是用DrawerLayout+NavigationView,逻辑也差不多,一个能正常显示选中项的颜色,另一个却不行,而且两者的「Profil」项默认都标记为选中状态。我帮你梳理几个最可能的原因和对应的解决办法:
1. 先检查Menu资源文件的差异
你第一个布局用的是@menu/menu_passager,第二个司机端的Menu文件虽然没贴出来,但这大概率是问题的源头:
- 确保司机端的每个Menu Item都添加了
android:checkable="true"属性,没有这个属性的话,选中状态根本不会生效。比如:<item android:id="@+id/profile_item_cond" android:title="Profil" android:checkable="true"/> - 检查NavigationView的颜色配置:如果你的选中项颜色是通过selector实现的,要确认司机端的NavigationView有没有正确引用这个selector。比如先创建一个颜色选择器
res/color/nav_item_selector.xml:
然后在司机端的NavigationView XML里添加:<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:color="@color/your_selected_color" android:state_checked="true"/> <item android:color="@color/your_default_color"/> </selector>app:itemTextColor="@color/nav_item_selector" app:itemIconTint="@color/nav_item_selector"
2. 排查setUpToolbar(item)方法的影响
第二个布局的代码里多次调用了setUpToolbar(item),这个自定义方法很可能无意中修改了MenuItem的选中状态。你可以打开这个方法看看:
- 有没有写类似
item.setChecked(false)的代码?这会直接取消选中状态; - 如果方法里只是设置Toolbar标题,那没问题,但如果有其他操作MenuItem的逻辑,一定要确保它不会干扰选中状态。
3. 手动确保选中状态被正确标记
即使默认选中了「Profil」,有时候初始化或切换页面时选中状态会丢失,你可以做这两步:
- 在司机端Activity的
onCreate方法里,手动设置初始选中项:@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.your_driver_layout); // ...其他初始化代码 NavigationView navigationView = findViewById(R.id.your_driver_nav_view); navigationView.setCheckedItem(R.id.profile_item_cond); // 确保初始选中Profil } - 在
onNavigationItemSelected方法里,处理完每个Item后,手动标记它为选中:@Override public boolean onNavigationItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.acceuil_item_conducteur: setUpToolbar(item); fm.beginTransaction().replace(R.id.frame_conducteur, new AcceuilConducteurFragment()).commit(); break; // 其他case逻辑... } item.setChecked(true); // 加上这行,强制标记当前Item为选中 drawer.closeDrawer(GravityCompat.START); return true; }
4. 检查NavigationView的初始化差异
最后再确认两个Activity里初始化NavigationView的代码完全一致:
- 有没有都设置了
setNavigationItemSelectedListener(this)? - 有没有其他代码(比如主题、样式)覆盖了NavigationView的选中状态样式?
按照上面的步骤排查,应该能快速定位到问题所在。优先检查Menu资源和setUpToolbar方法,这两个是最容易出问题的地方。
内容的提问来源于stack exchange,提问作者Manel
相关产品推荐
相关产品推荐

