NavigationView主题选中项背景样式
NavigationView theme selected item background style
我为我的应用程序创建了一个替代主题,即深色。我使用定义为
的导航栏
<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" />
它在菜单中定义了两个可选择的组
<item
android:id="@+id/sort_item"
android:title="One">
<menu>
<group
android:id="@+id/menu_group_sort"
android:checkableBehavior="single">
<item
android:id="@+id/nav_sort_new"
android:title="@string/menu_new" />
<item
android:id="@+id/nav_sort_hot"
android:title="@string/menu_hot" />
<item
android:id="@+id/nav_sort_top"
android:title="@string/menu_top" />
</group>
</menu>
</item>
<item
android:id="@+id/filter_item"
android:title="Two">
<menu>
<group
android:id="@+id/menu_group_filter"
android:checkableBehavior="single">
<item
android:id="@+id/nav_category_all"
android:title="@string/menu_all" />
<item
android:id="@+id/nav_category_business"
android:title="@string/menu_business" />
<item
android:id="@+id/nav_category_technology"
android:title="@string/menu_technology" />
<item
android:id="@+id/nav_category_politics"
android:title="@string/menu_politics" />
</group>
</menu>
</item>
通常,所选项目的文本是 colorPrimary,背景看起来是某种 Android 灰色。当我定义我的新主题时,我就这样使用它
<!-- Dark theme. -->
<style name="AppTheme.Dark" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimaryInverse</item>
<item name="colorPrimaryDark">@color/colorPrimaryDarkInverse</item>
<item name="colorAccent">@color/colorAccentInverse</item>
<item name="android:textColor">@color/textColorPrimaryInverse</item>
<item name="android:textColorPrimary">@color/textColorPrimaryInverse</item>
<item name="android:textColorSecondary">@color/textColorSecondaryInverse</item>
<item name="android:textColorPrimaryInverse">@color/textColorPrimary</item>
<item name="android:textColorSecondaryInverse">@color/textColorSecondary</item>
<item name="android:background">@color/colorPrimaryInverse</item>
<item name="colorControlHighlight">@color/colorAccentInverse</item>
</style>
这几乎可以正常工作,除 NavigationView 中当前选定的项目外,所有内容的样式都完全符合我的要求。相反,它似乎只是 colorPrimary 的 1 个实心块(没有图标,没有文本),末端是 colorControlHighlight,仅此而已。
有谁知道如何自定义 NavigationView 菜单中的所选项目?我已经尝试了所有我能想到的状态,但 none 奏效了。
您不必为这个自定义样式,您可以将 Color State List 设置为 NavigationView
app:itemTextColor
。
示例:
NavigationView:
<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:itemTextColor="@color/nav_state_list"
app:headerLayout="@layout/nav_header_drawer"
app:menu="@menu/activity_drawer_drawer" />
在你的res/color
中创建一个nav_state_list.xml
文件并把这个放在里面:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Item checked -->
<item android:color="#313189" android:state_checked="true" />
<!-- Item pressed -->
<item android:color="#318931" android:state_pressed="true" />
<!-- Item default -->
<item android:color="#893131" />
</selector>
这就是它的处理方式:
我为我的应用程序创建了一个替代主题,即深色。我使用定义为
的导航栏<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" />
它在菜单中定义了两个可选择的组
<item
android:id="@+id/sort_item"
android:title="One">
<menu>
<group
android:id="@+id/menu_group_sort"
android:checkableBehavior="single">
<item
android:id="@+id/nav_sort_new"
android:title="@string/menu_new" />
<item
android:id="@+id/nav_sort_hot"
android:title="@string/menu_hot" />
<item
android:id="@+id/nav_sort_top"
android:title="@string/menu_top" />
</group>
</menu>
</item>
<item
android:id="@+id/filter_item"
android:title="Two">
<menu>
<group
android:id="@+id/menu_group_filter"
android:checkableBehavior="single">
<item
android:id="@+id/nav_category_all"
android:title="@string/menu_all" />
<item
android:id="@+id/nav_category_business"
android:title="@string/menu_business" />
<item
android:id="@+id/nav_category_technology"
android:title="@string/menu_technology" />
<item
android:id="@+id/nav_category_politics"
android:title="@string/menu_politics" />
</group>
</menu>
</item>
通常,所选项目的文本是 colorPrimary,背景看起来是某种 Android 灰色。当我定义我的新主题时,我就这样使用它
<!-- Dark theme. -->
<style name="AppTheme.Dark" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimaryInverse</item>
<item name="colorPrimaryDark">@color/colorPrimaryDarkInverse</item>
<item name="colorAccent">@color/colorAccentInverse</item>
<item name="android:textColor">@color/textColorPrimaryInverse</item>
<item name="android:textColorPrimary">@color/textColorPrimaryInverse</item>
<item name="android:textColorSecondary">@color/textColorSecondaryInverse</item>
<item name="android:textColorPrimaryInverse">@color/textColorPrimary</item>
<item name="android:textColorSecondaryInverse">@color/textColorSecondary</item>
<item name="android:background">@color/colorPrimaryInverse</item>
<item name="colorControlHighlight">@color/colorAccentInverse</item>
</style>
这几乎可以正常工作,除 NavigationView 中当前选定的项目外,所有内容的样式都完全符合我的要求。相反,它似乎只是 colorPrimary 的 1 个实心块(没有图标,没有文本),末端是 colorControlHighlight,仅此而已。
有谁知道如何自定义 NavigationView 菜单中的所选项目?我已经尝试了所有我能想到的状态,但 none 奏效了。
您不必为这个自定义样式,您可以将 Color State List 设置为 NavigationView
app:itemTextColor
。
示例:
NavigationView:
<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:itemTextColor="@color/nav_state_list"
app:headerLayout="@layout/nav_header_drawer"
app:menu="@menu/activity_drawer_drawer" />
在你的res/color
中创建一个nav_state_list.xml
文件并把这个放在里面:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- Item checked -->
<item android:color="#313189" android:state_checked="true" />
<!-- Item pressed -->
<item android:color="#318931" android:state_pressed="true" />
<!-- Item default -->
<item android:color="#893131" />
</selector>
这就是它的处理方式: