【问题标题】:Setting background color for programmatically added menu item of Navigation View when checked in Android在 Android 中检查时为以编程方式添加的导航视图菜单项设置背景颜色
【发布时间】:2019-06-16 18:33:37
【问题描述】:

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

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

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>

我的导航视图 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>

当我运行时,导航视图中所有菜单项的背景都会更改,即使它们没有被选中。我想要的只是在选择时改变。我怎样才能实现它?

我尝试将 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>

但它不起作用。

【问题讨论】:

  • 尝试更改此属性app:itemIconTint="@drawable/drawer_item" app:itemTextColor="@drawable/drawer_item" 并提供适用的颜色。
  • 我也有同样的问题。你可以试试这个库,它有很多功能,默认启用突出显示github.com/mikepenz/MaterialDrawer
  • 我变了。但不仅仅是在工作@Ironman
  • @WaiYanHein 你能告诉我你为什么要以编程方式设置Menu,因为在 UpDate 版本中,完整的导航抽屉已经准备好工作。因此,请检查您是否不使用更新版本只需更新版本,它将直接为您提供所有这些..
  • 我正在以编程方式设置导致来自 API 的所有数据。要使用这个github.com/mikepenz/MaterialDrawer,我必须更改整个活动。

标签: android navigation-drawer menuitem android-navigationview


【解决方案1】:

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

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

【讨论】:

  • menu.setCheckable(true); - 启用菜单项的背景颜色,然后menu.setChecked(true) - 为菜单项文本着色。
猜你喜欢
  • 1970-01-01
  • 2019-05-29
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
  • 1970-01-01
相关资源
最近更新 更多