Android导航抽屉:取消菜单选中状态及移除选中区域颜色
我来帮你搞定这两个Navigation Drawer的问题,分两部分给你详细说明:
一、取消Navigation Drawer菜单的选中状态
有两种常用方式,你可以根据需求选择:
- 方式1:点击后立即取消选中
在你的onNavigationItemSelected方法里,处理完Fragment跳转逻辑后,直接调用item.setChecked(false);,这样点击菜单后就不会保留选中状态。修改后的代码示例如下:
public boolean onNavigationItemSelected(MenuItem item) { // Handle navigation view item clicks here. int id = item.getItemId(); if (id == R.id.nav_mapa) { MapFragment mapFragment = new MapFragment(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.fragment_container, mapFragment); fragmentTransaction.commit(); } else if (id == R.id.nav_anuncios) { AnunciosFragment anunciosFragment = new AnunciosFragment(); FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.fragment_container, anunciosFragment); fragmentTransaction.commit(); } // 取消当前item的选中状态 item.setChecked(false); // 记得关闭Drawer DrawerLayout drawer = findViewById(R.id.drawer_layout); drawer.closeDrawer(GravityCompat.START); return true; }
- 方式2:初始化/关闭Drawer时清空选中状态
如果你希望打开Drawer时默认没有任何选中项,可以在Activity的onCreate方法里,或者onDrawerClosed回调中,给NavigationView设置setCheckedItem(-1):
// 假设你的NavigationView实例是navigationView NavigationView navigationView = findViewById(R.id.nav_view); navigationView.setCheckedItem(-1);
二、移除菜单选中区域的颜色
要移除选中时的高亮颜色,需要修改NavigationView的item背景选择器,具体步骤如下:
- 首先在
res/drawable目录下创建一个名为nav_item_selector.xml的文件,内容如下:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <!-- 选中状态设置为透明,和背景一致 --> <item android:state_checked="true" android:drawable="@android:color/transparent" /> <!-- 默认状态也用透明,避免其他高亮 --> <item android:drawable="@android:color/transparent" /> </selector>
- 然后在你的布局文件中,找到NavigationView控件,添加
app:itemBackground属性引用这个drawable:
<com.google.android.material.navigation.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" app:menu="@menu/activity_main_drawer" <!-- 添加这行设置背景选择器 --> app:itemBackground="@drawable/nav_item_selector" />
如果你的项目使用旧版Support库,把com.google.android.material.navigation.NavigationView换成android.support.design.widget.NavigationView即可。
另外,如果你想通过样式全局修改,也可以在styles.xml里定义一个样式:
<style name="NavViewStyle" parent="Widget.Design.NavigationView"> <item name="colorControlHighlight">@android:color/transparent</item> </style>
然后给NavigationView设置style="@style/NavViewStyle",同样能移除选中时的高亮颜色。
内容的提问来源于stack exchange,提问作者BK201
相关产品推荐
相关产品推荐

