android - 在 Android 中选中时,为以编程方式添加的导航 View 菜单项设置背景颜色

标签 android navigation-drawer menuitem android-navigationview

我正在开发一个 Android 应用程序。在我的应用程序中,我以编程方式将菜单项添加到导航 View 。但是我在设计这些项目时遇到了问题。我的问题是现在只有当项目被选中时文本颜色才会改变。但我想要的是像下面这样用背景突出显示的项目。

enter image description here

我正在像这样以编程方式添加菜单项

menu.add(CATEGORY_MENU_GROUP_ID, itemId, i + 1, title).setIcon(dIcon).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() {
                    @Override
                    public boolean onMenuItemClick(MenuItem item) {

                        item.setChecked(true);
                        return true;
                    }
                });

我关注了这个问题 Android - Navigation View item menu background color

所以我创建了这样的背景项目 (nav_item_bg.xml)

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" >

    <!-- view background color -->
    <solid android:color="@color/lightGray" >
    </solid>

    <!-- view border color and width -->
    <stroke
        android:width="1dp"
        android:color="@color/lightGray" >
    </stroke>

    <!-- Here is the corner radius -->

</shape>

我的导航 View xml

<android.support.design.widget.NavigationView
        app:itemIconTint="@drawable/drawer_item"
        app:itemTextColor="@drawable/drawer_item"
        android:id="@+id/left_nv_view"

        app:headerLayout="@layout/header_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start" />

这是我在 drawable 中的 drawer_item.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/colorAccent"  android:state_enabled="true" android:state_checked="true" />
    <!--state is enabled and not checked-->
    <item android:color="@color/black" android:state_enabled="true" android:state_checked="false" />
    <!--state (menu item) is disabled -->
    <item android:state_enabled="false" android:color="@color/lightGray"  />
</selector>

当我运行时,即使未选中,导航 View 中所有菜单项的背景也会更改。我想要的只是在选择时更改。我怎样才能实现它?

我尝试将 nav_item_bg.xml 更改为此

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/lightGray"  android:state_enabled="true" android:state_checked="true" />
    <!--state is enabled and not checked-->
    <item android:color="@color/white" android:state_enabled="true" android:state_checked="false" />
    <!--state (menu item) is disabled -->
    <item android:state_enabled="false" android:color="@color/white"  />
</selector>

但它不起作用。

最佳答案

添加新菜单后,只需为其设置checkAble值即可:

menu.add(CATEGORY_MENU_GROUP_ID, itemId, i + 1, title).setIcon(dIcon).setCheckable(true);

关于android - 在 Android 中选中时,为以编程方式添加的导航 View 菜单项设置背景颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38453742/

相关文章:

android - Pro guard错误构建发布apk

android - 在 Android 设备上的 Eclipse 中调试 C++

contextmenu - 获取 ContextMenu 并添加新项目时出错

android - onLongClick 显示菜单选项

android - 如何删除表的所有内容以及如何在 Eclipse 或 Android Emulator 中查看数据库

安卓 - ResourceNotFoundException : File res/drawable/ratingbar_full. xml

flutter - 在底部抽屉导航 flutter 中注销

Android:在 Fragment 切换后恢复 MenuItem ActionView

android - OnItemClickListener 抽屉导航

java - 抽屉导航选择的项目不显示第二组项目的背景颜色