【问题标题】:Android - Navigation View item menu background colorAndroid - 导航视图项目菜单背景颜色
【发布时间】:2015-07-04 14:18:07
【问题描述】:

我尝试更改我的项目导航视图菜单的颜色:

styles.xml

<item name="android:activatedBackgroundIndicator">@drawable/activated_background</item>

activated_background.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="true" android:drawable="@color/White" />
    <item android:state_focused="true" android:drawable="@color/White" />
    <item android:state_activated="true" android:drawable="@color/White" />
    <item android:drawable="@android:color/transparent" />
</selector>

抽屉.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:android="http://schemas.android.com/apk/res/android">

<group
    android:id="@+id/group_1">
    <item
        android:id="@+id/drawer_menu_account"
        android:checked="false"
        android:title="@string/menu_account"
        android:icon="@drawable/ic_account_grey600_24dp" />
    <item
        android:id="@+id/drawer_menu_my_post"
        android:checked="false"
        android:title="@string/menu_my_post"
        android:icon="@drawable/ic_pin_grey600_24dp" />
</group>
[...]

背景颜色不变.. 我做错了什么?

【问题讨论】:

    标签: android navigation-drawer navigationview


    【解决方案1】:

    您没有在您的 styles.xml 文件中为导航视图项的背景设置可绘制对象。打开包含导航视图小部件的 XML 布局文件,并将以下行添加到小部件的属性中:

    app:itemBackground="@drawable/activated_background.xml"
    

    如果您在使用“app”指针时遇到问题,请同时添加以下行:

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

    请注意,这只会更改所选列表项的背景颜色。如果您还希望更改图标和文本颜色,请改用app:itemTextColor 属性。

    【讨论】:

    • 谢谢,它的工作。所以styles.xml中的那一行可以去掉。
    • 这可以找到但检查状态不适用于选择器
    • 不错的解决方案。有什么办法可以让背景保持选中状态?
    • @HaloMediaz 你是否已经解决了在抽屉关闭后选择时保持背景?
    • 确保每个 menuItem 都明确地将“isCheckable”设置为 true。
    【解决方案2】:

    下面的代码对我来说很好
    我的导航视图:

    <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"
        android:background="@color/nav.background"
        app:menu="@menu/menu_drawer"
        app:itemBackground="@drawable/nav_item_background"
        app:itemTextColor="@drawable/nav_item_text"/>
    

    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_pressed="true" android:drawable="@color/nav.item.background" />
      <item android:state_checked="true" android:drawable="@color/nav.item.background" />
      <item android:state_focused="true" android:drawable="@color/nav.item.background" />
      <item android:state_activated="true" android:drawable="@color/nav.item.background" />
      <item android:drawable="@color/nav.item.background.default" />
    </selector>
    

    可绘制/nav_item_text.xml

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
      <item android:color="@android:color/white" android:state_checked="true" />
      <item android:color="#bdbdbd" />
    </selector>
    

    【讨论】:

    • 感谢详细的解决方案。
    • 它改变了父菜单项的背景颜色但是孩子呢?
    【解决方案3】:

    导航菜单的背景颜色必须使用 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"

    【讨论】:

    • 谢谢,如何从属性中更改分隔符组线颜色?
    【解决方案4】:

    要在您选择的项目上显示背景,您需要添加

     android:checkable="true"
    

    在 menu.xml 项目的每个项目上,然后设置:

    app:itemBackground="@drawable/nav_view_item_background"
    

    在您的 NavigationView 上,最后:

    drawable/nav_view_item_background.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:drawable="@color/primary" android:state_checked="true" />
        <item android:drawable="@android:color/transparent" />
    </selector>
    

    【讨论】:

    • 很高兴,代我向你的猫问好 :)
    【解决方案5】:

    @HaloMediaz 和 @HemantShori 要将选中项的背景保持在选中状态,

    在颜色状态资源中使用android:state_checked="true" 而不是android:state_pressed="true"。

    所以你激活的颜色状态资源应该是这样的:

    activated_background.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_checked="true" android:drawable="@color/White" />
        <item android:state_focused="true" android:drawable="@color/White" />
        <item android:state_activated="true" android:drawable="@color/White" />
        <item android:drawable="@android:color/transparent" />
    </selector>
    

    【讨论】:

    • 你的答案对我来说是正确的,但是当你复制它时看看代码,你没有将 state_pressed 更改为 state_checked
    • 我刚刚看到了。那是我的疏忽。我已经更正了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-13
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多