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

Android导航抽屉:取消菜单选中状态及移除选中区域颜色

解决Navigation Drawer菜单选中状态与选中区域颜色问题

我来帮你搞定这两个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背景选择器,具体步骤如下:

  1. 首先在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>
  1. 然后在你的布局文件中,找到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:11:22