我的Android应用中有一个导航抽屉。这是代码:
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"
android:fitsSystemWindows="true"
android:background="@color/white"
app:headerLayout="@layout/nav_header"
app:menu="@menu/drawer_menu"
app:itemTextColor="@color/drawer_item"
app:itemIconTint="@color/drawer_item"
app:itemBackground="@drawable/nav_divider"/>
我已使用此post的答案在项目之间添加分隔线。这是我在nav_divider
中用作itemBackground
的{{1}}可绘制对象:
NavigationView
现在,问题是如何更改所选项目的背景颜色。我知道如何在没有分隔线的情况下执行此操作,但是使用分隔线会更加复杂。
更新:
这是我尝试过的:
我创建了另一个名为<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="@dimen/activity_horizontal_margin">
<shape android:shape="rectangle">
<solid android:color="@color/light_gray"/>
</shape>
</item>
<item android:bottom="1dp">
<shape android:shape="rectangle">
<solid android:color="@color/white"/>
</shape>
</item>
</layer-list>
的可绘制对象,它与上面的nav_divider_selected
完全一样,只是颜色不同。
然后,我创建了一个nav_divider
可绘制对象,如下所示:
drawer_item_background
然后,将<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/nav_divider_selected" android:state_selected="true"/>
<item android:drawable="@drawable/nav_divider"/>
</selector>
的{{1}}替换为新的选择器(itemBackground
)。但是,它没有用。由于某种原因,这些项目看起来都是黑色的。
答案 0 :(得分:0)
我明白了。这是一个简单的问题。我只是使用了错误的状态。所以,这是解决方案。我创建了两个不同的图层列表(以将分隔线添加到导航项中):
nav_divider:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="@dimen/activity_horizontal_margin">
<shape android:shape="rectangle">
<solid android:color="@color/light_gray"/>
</shape>
</item>
<item android:bottom="1dp">
<shape android:shape="rectangle">
<solid android:color="@color/white"/>
</shape>
</item>
</layer-list>
nav_divider_selected:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:left="@dimen/activity_horizontal_margin">
<shape android:shape="rectangle">
<solid android:color="@color/light_gray"/>
</shape>
</item>
<item android:bottom="1dp">
<shape android:shape="rectangle">
<solid android:color="@color/light_blue"/>
</shape>
</item>
</layer-list>
然后,创建一个drawer_item_background
这样的可绘制对象(state_checked
不应该使用state_selected
):
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/nav_divider_selected" android:state_checked="true"/>
<item android:drawable="@drawable/nav_divider"/>
</selector>
然后,我在itemBackground
中将此可绘制对象用作NavigationView
:
<com.google.android.material.navigation.NavigationView
android:id="@+id/nav_view"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="right"
android:fitsSystemWindows="true"
android:background="@color/white"
app:headerLayout="@layout/nav_header"
app:menu="@menu/drawer_menu"
app:itemTextColor="@color/drawer_item"
app:itemIconTint="@color/drawer_item"
app:itemBackground="@drawable/drawer_item_background"/>
答案 1 :(得分:0)
如果万一您不想使用选择器来实现,您可以这样做
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_share"
android:icon="@drawable/ic_menu_share"
android:title="@string/menu_share" />
</group>
通过将元素包装在<group android:checkableBehavior="single">
下,我们得到了选定的背景。
答案 2 :(得分:0)
在下面尝试以下item_background.xml 适用于NavigationView的app:itemBackground =“ @ drawable / item_background”
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/rgb_red" android:state_checked="true" />
<item android:drawable="@color/rgb_red" android:state_activated="true" />
<item>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@color/rgb_white" />
<item android:start="-2dp"
android:top="-2dp"
android:end="-2dp">
<shape>
<solid android:color="@android:color/transparent" />
<stroke android:width="1dp" android:color="@color/rgb_pale_gray"/>
</shape>
</item>
</layer-list>
</item>
</selector>
希望它将对您有帮助