如何设置设计支持库的 NavigationView 的样式?
How to style the Design Support library's NavigationView?
所以我正在使用 Android Design Support Library
提供的 NavigationView
我似乎找不到有关如何设置样式的示例。
到目前为止我有:
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/drawer"
app:itemTextColor="@color/black"
app:itemIconTint="@color/black"/>
header 的样式很容易,因为它在自己的 xml 布局下,但 body 是菜单资源文件,而不是布局。
app:itemTextColor
更改文本颜色
app:itemIconTint
更改图标颜色
app:itemBackground
更改项目背景颜色
那么怎么设置
- 所选项目背景
- 所选项目文字颜色
- 所选项目图标色调
我已经回答了类似的问题。
基本上你需要做的是,使用 Color State List Resource
。为此,首先在 color
目录(应该在 res
目录中)内创建一个新的 xml
(例如 drawer_item.xml)。如果您没有名为 color 的目录已经,创建一个。
现在在里面 drawer_item.xml
做这样的事情
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="checked state color" android:state_checked= "true" />
<item android:color="your default color" />
</selector>
对于itemBackground
,一个单独的drawable也需要放置在drawable文件夹中。名称相同 drawer_item
。对于 itemBackground
:
需要设置 android:drawable
属性 而不是 android:color
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/shape_rectangle_checked"
android:state_checked= "true" />
<item android:drawable="@drawable/shape_rectangle" />
</selector>
文件shape_rectangle
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff" /> <!--white color -->
</shape>
文件shape_rectangle_checked
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#25aaf1" /> <!--blue color -->
</shape>
然后像这样在导航视图中设置
app:itemIconTint="@color/drawer_item" //notice here
app:itemTextColor="@color/drawer_item" //and here
app:itemBackground="@drawable/drawer_item"//and here for changing the background color of the item which is checked
为了扩展@Sash_KP 的答案,对于 drawable
文件夹中的 xml
,您不需要 @drawable/shape_rectangle
和 @drawable/shape_rectangle_check
。你可以只使用 @color/your_color
.
还有 API >= 21
,我注意到默认情况下导航菜单项有一个预设选择器。您会注意到,如果您触摸并按住菜单项,就会出现波纹。使用自定义 itemBackground
不会覆盖默认波纹。因此,如果您使用 ripple drawable
,它将产生两个涟漪!此外,带有 ripple drawables
的菜单项由于某种原因不允许您处于按下状态(默认波纹只有在您按住时才会出现)。
所以对于 API >= 21
,我不建议使用 ripple drawable
。只需使用没有自定义波纹的常规 selector drawable
。
所以我正在使用 Android Design Support Library
提供的 NavigationView我似乎找不到有关如何设置样式的示例。
到目前为止我有:
<android.support.design.widget.NavigationView
android:id="@+id/navigation_view"
android:layout_height="match_parent"
android:layout_width="wrap_content"
android:layout_gravity="start"
app:headerLayout="@layout/header"
app:menu="@menu/drawer"
app:itemTextColor="@color/black"
app:itemIconTint="@color/black"/>
header 的样式很容易,因为它在自己的 xml 布局下,但 body 是菜单资源文件,而不是布局。
app:itemTextColor
更改文本颜色app:itemIconTint
更改图标颜色app:itemBackground
更改项目背景颜色
那么怎么设置
- 所选项目背景
- 所选项目文字颜色
- 所选项目图标色调
我已经回答了类似的问题
基本上你需要做的是,使用 Color State List Resource
。为此,首先在 color
目录(应该在 res
目录中)内创建一个新的 xml
(例如 drawer_item.xml)。如果您没有名为 color 的目录已经,创建一个。
现在在里面 drawer_item.xml
做这样的事情
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="checked state color" android:state_checked= "true" />
<item android:color="your default color" />
</selector>
对于itemBackground
,一个单独的drawable也需要放置在drawable文件夹中。名称相同 drawer_item
。对于 itemBackground
:
android:drawable
属性 而不是 android:color
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:drawable="@drawable/shape_rectangle_checked"
android:state_checked= "true" />
<item android:drawable="@drawable/shape_rectangle" />
</selector>
文件shape_rectangle
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#ffffff" /> <!--white color -->
</shape>
文件shape_rectangle_checked
:
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#25aaf1" /> <!--blue color -->
</shape>
然后像这样在导航视图中设置
app:itemIconTint="@color/drawer_item" //notice here
app:itemTextColor="@color/drawer_item" //and here
app:itemBackground="@drawable/drawer_item"//and here for changing the background color of the item which is checked
为了扩展@Sash_KP 的答案,对于 drawable
文件夹中的 xml
,您不需要 @drawable/shape_rectangle
和 @drawable/shape_rectangle_check
。你可以只使用 @color/your_color
.
还有 API >= 21
,我注意到默认情况下导航菜单项有一个预设选择器。您会注意到,如果您触摸并按住菜单项,就会出现波纹。使用自定义 itemBackground
不会覆盖默认波纹。因此,如果您使用 ripple drawable
,它将产生两个涟漪!此外,带有 ripple drawables
的菜单项由于某种原因不允许您处于按下状态(默认波纹只有在您按住时才会出现)。
所以对于 API >= 21
,我不建议使用 ripple drawable
。只需使用没有自定义波纹的常规 selector drawable
。