首页 > 解决方案 > 如何自定义导航抽屉上的特定菜单项?

问题描述

我一直在尝试将背景颜色放在导航抽屉菜单中的特定项目上。但是,我发现了一些在 Navigation Drawer 上进行编码的解决方案,但它会更改整个项目的颜色或选定项目的颜色。

这是我想要制作的图像:

在此处输入图像描述

正如您可以从图像中检查的那样,我想在作为“注销”项目的背景颜色的单个项目上放置不同的背景和文本颜色。所以我尝试使用app:actionLayout.

到目前为止,我可以做一点,但仍然存在一些布局规则问题等等。

这是我到目前为止所做的图像:IMAGE

我很高兴谁分享和解决这个问题。谢谢!

菜单/activity_main_drawer.xml

<menu xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:android="http://schemas.android.com/apk/res/android">

<group android:checkableBehavior="single">
<item android:title="@string/nav_menu_mypage">
    <menu>
        <item
            android:id="@+id/nav_mystudy"
            android:icon="@drawable/nav_mypocket"
            android:title="@string/mypage_mypocket" />
        <item
            android:id="@+id/nav_search"
            android:icon="@drawable/nav_search"
            android:title="@string/mypage_search" />
        <item
            android:id="@+id/nav_logout"
            android:title=""
            app:actionLayout="@layout/drawer_menu_item"
            app:showAsAction="always"/>
        <!--app:itemBackground="@drawable/nav_logout_background"-->
    </menu>
</item>
</group>

</menu>

布局/drawer_menu_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary"
android:orientation="horizontal">

<ImageView
    android:layout_width="30dp"
    android:layout_height="match_parent"
    android:src="@drawable/nav_logout"
    android:gravity="center_vertical"/>

<TextView
    android:id="@+id/item_text"
    android:layout_marginLeft="20dp"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical"
    android:text="Logout"
    android:textSize="15dp"
    android:textColor="@color/white"/>
</LinearLayout>

布局/activity_main.xml

    <android.support.design.widget.NavigationView
        android:id="@+id/nav_view"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:fitsSystemWindows="true"
        app:headerLayout="@layout/nav_header_main"
        app:menu="@menu/activity_main_drawer"
        app:itemIconTint="@drawable/nav_item_icon_color"
        app:itemTextColor="@drawable/nav_item_text_color"
        app:itemBackground="@drawable/nav_item_background" />

可绘制/nav_item_background.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
    android:state_pressed="true"
    android:drawable="@color/drawer_menu_item_bg_pressed"/>  <!-- #F0F0F0 -->
<item
    android:state_checked="true"
    android:drawable="@color/drawer_menu_item_bg_checked"/>  <!-- #efefef -->
<item
    android:state_selected="true"
    android:drawable="@color/drawer_menu_item_bg_checked"/>
<item
    android:drawable="@android:color/transparent"/>
</selector>

标签: androidandroid-xmlnavigation-drawerandroid-drawer

解决方案


您必须使用 android:background="color" 作为导航菜单的背景颜色,例如:

<android.support.design.widget.NavigationView
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="wrap_content"
    android:layout_height="match_parent"
    android:layout_gravity="start"
    android:id="@+id/shitstuff"
    app:itemTextColor="@color/black"
    app:menu="@menu/drawermenu"
    android:background="@color/colorAccent"
    android:layout_marginTop="-24dp"
    />

对于项目颜色使用 itemTextColor="color"


推荐阅读