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

Android Studio中如何高亮抽屉菜单当前Activity对应的菜单项

抽屉菜单当前页对应菜单项高亮实现方案

1. 定义菜单项选中状态选择器

在res/drawable目录下新建nav_item_background.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="@color/colorPrimaryLight" />
    <!-- 默认状态背景 -->
    <item android:drawable="@android:color/transparent" />
</selector>

你可以提前在res/values/colors.xml中自定义高亮颜色,示例:

<color name="colorPrimaryLight">#BBDEFB</color>

2. 给NavigationView配置选中属性

修改activity_main.xml中的NavigationView代码,新增选中背景和单选行为配置:

<com.google.android.material.navigation.NavigationView
    android:id="@+id/navView"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:headerLayout="@layout/nav_header"
    app:menu="@menu/nav_drawer_menu"
    <!-- 新增以下两项配置 -->
    app:itemBackground="@drawable/nav_item_background"
    app:checkableBehavior="single" />

其中app:checkableBehavior="single"作用是设置菜单为单选模式,同一时间只能有一个菜单项处于选中状态。

3. 代码中实现选中逻辑

因为你的菜单项对应独立Activity,可按以下逻辑实现选中状态同步:

3.1 给NavigationView设置点击监听

在主Activity(承载抽屉的Activity)中设置菜单项点击事件,点击时先标记对应菜单项为选中状态,再执行跳转逻辑:

// Java 示例
navView.setNavigationItemSelectedListener(item -> {
    // 标记当前点击的菜单项为选中
    item.setChecked(true);
    // 关闭抽屉
    drawerLayout.closeDrawer(GravityCompat.START);
    // 跳转对应Activity
    if (item.getItemId() == R.id.miHome) {
        // 已经是主页,无需跳转
        return true;
    } else if (item.getItemId() == R.id.miSetting) {
        startActivity(new Intent(this, SettingActivity.class));
    } else if (item.getItemId() == R.id.miProfile) {
        startActivity(new Intent(this, ProfileActivity.class));
    }
    return true;
});
// Kotlin 示例
navView.setNavigationItemSelectedListener { item ->
    item.isChecked = true
    drawerLayout.closeDrawer(GravityCompat.START)
    when (item.itemId) {
        R.id.miHome -> {}
        R.id.miSetting -> startActivity(Intent(this, SettingActivity::class.java))
        R.id.miProfile -> startActivity(Intent(this, ProfileActivity::class.java))
    }
    true
}

3.2 处理返回主页的选中状态恢复

用户从其他Activity返回主页面时,默认选中主页菜单项,在主Activity的onResume方法中添加如下代码:

@Override
protected void onResume() {
    super.onResume();
    navView.setCheckedItem(R.id.miHome);
}

如果有特殊需求需要在其他页面打开抽屉时也高亮对应菜单项,可以将当前选中的菜单项ID存储到SharedPreferences或者全局变量中,每次抽屉打开时读取ID设置选中即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 20:45:08