我的应用程序中有标准的Android,素材外观,导航视图,我想知道是否可以更改列表中第一个元素的背景颜色。
我尝试通过获取标题字符串并设置BackgroundColorSpan
来实现,但它只会更改TextView背景颜色。
val proItem = nav_view.menu.findItem(R.id.pro_item)
val spanString = SpannableString(proItem.title)
spanString.setSpan(BackgroundColorSpan(R.color.colorAccent), 0, spanString.length, 0)
proItem.title = spanString
我正在寻找与NavigationView中的app:itemBackground
标签类似的东西,但它会为列表中的每个项目执行此操作,而我只希望在一个项目上执行此操作。
有没有办法实现它?
答案 0 :(得分:2)
app:itemBackground
可用于更改背景颜色。您可以为已检查状态创建一个选择器,并在xml中引用它。
selector.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- focused -->
<item android:state_checked="true" android:drawable="@color/btn_color_green_alpha"></item>
</selector>
colors.xml
<color name="btn_color_green_alpha">#3300ff00</color>
布局文件
<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:itemBackground="@drawable/selector" //line to be added
app:headerLayout="@layout/nav_header_main2"
app:menu="@menu/activity_main2_drawer" />
希望这有帮助。
如果您只想要一个选定颜色的项目并且不想申请其他项目,那么您可以将其他项目设为checkable = false。
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:showIn="navigation_view">
<group android:checkableBehavior="single">
<item
android:id="@+id/nav_camera"
android:icon="@drawable/ic_menu_camera"
android:title="Import" />
<item
android:id="@+id/nav_gallery"
android:checkable="false" //line added here
android:icon="@drawable/ic_menu_gallery"
android:title="Gallery" />
<item
android:id="@+id/nav_slideshow"
android:icon="@drawable/ic_menu_slideshow"
android:title="Slideshow" />
<item
android:id="@+id/nav_manage"
android:icon="@drawable/ic_menu_manage"
android:title="Tools" />
</group>
</menu>