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
相关产品推荐
相关产品推荐

