动态更改导航视图项目颜色 Android
Change Navigation View Item Color Dynamically Android
我想构建一个导航抽屉,其中每个项目都有不同的选择颜色(图标色调和文本颜色),因为 google Play 商店有:
我不确定他们是如何解决这个问题的,我认为他们对不同的抽屉使用不同的活动。我想使用片段,我想更改图标色调和文本颜色。我有什么想法可以做到这一点?我正在使用 google 的设计支持库和一个带有导航视图的抽屉布局。
在 NavigationView
中使用 app:itemIconTint
作为图标,使用 app:itemTextColor
作为 textColors
示例:
drawable/navigation_text_color
:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is used when the Navigation Item is checked -->
<item android:color="#009688" android:state_checked="true" />
<!-- This is the default text color -->
<item android:color="#E91E63" />
</selector>
和layout
:
<android.support.design.widget.NavigationView
.
.
app:itemTextColor="@drawable/navigation_text_color"/>
Finllay 我得到了答案,
您必须将颜色文件中的 colorAccent 更改为您想要的颜色:
<color name="colorAccent">whichever color required</color>
这个解决方案对我有用
如果你所说的动态是指以编程方式,你可以试试这个:
// FOR NAVIGATION VIEW ITEM TEXT COLOR
int[][] states = new int[][]{
new int[]{-android.R.attr.state_checked}, // unchecked
new int[]{android.R.attr.state_checked}, // checked
new int[]{} // default
};
// Fill in color corresponding to state defined in state
int[] colors = new int[]{
Color.parseColor("#747474"),
Color.parseColor("#007f42"),
Color.parseColor("#747474"),
};
ColorStateList navigationViewColorStateList = new ColorStateList(states, colors);
// apply to text color
navigationView.setItemTextColor(navigationViewColorStateList);
// apply to icon color
navigationView.setItemIconTintList(navigationViewColorStateList);
因此您可以为不同的设置定义多种颜色,例如白天或夜晚。
<android.support.design.widget.NavigationView
.
.
app:itemIconTint="@color/your_selector_file_name" // for Icon
app:itemTextColor="@color/your_selector_file_name" // for text
/>
添加@DAVOOD 所说的内容。下面的颜色选择器对我有用。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is used when the Navigation Item is checked -->
<item android:color="@color/tenoBrandColor" android:state_pressed="true" />
<!-- This is the default text color -->
<item android:color="@color/textprimary" />
</selector>
对于那些懒惰的人来说,有一个更简单的选择。
TL;DR: 只需创建一个新的 style
,其中 colorPrimary
是您想要的颜色,然后设置 NavigationView
theme
成为新的 style
.
只需创建一个新的 style
作为:
<style name="AppTheme.NoActionBar.NavigationView">
<item name="colorPrimary">@color/myDesiredColor</item>
</style>
这个style
会自动继承你的基础theme
(在我的例子中是AppTheme.NoActionBar
)然后你只需要设置你想要的colorPrimary
颜色.
那么您只需将 NavigationView
的 theme
设置为:
android:theme="@style/AppTheme.NoActionBar.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:headerLayout="@layout/nav_header_menu_test"
app:menu="@menu/main_drawer"
android:theme="@style/AppTheme.NoActionBar.NavigationView" />
您可以使用
以编程方式执行此操作
MenuItemCompat.setIconTintMode(item, PorterDuff.Mode.DST)
其中 item
是您不需要色调的 MenuItem。
我想构建一个导航抽屉,其中每个项目都有不同的选择颜色(图标色调和文本颜色),因为 google Play 商店有:
我不确定他们是如何解决这个问题的,我认为他们对不同的抽屉使用不同的活动。我想使用片段,我想更改图标色调和文本颜色。我有什么想法可以做到这一点?我正在使用 google 的设计支持库和一个带有导航视图的抽屉布局。
在 NavigationView
中使用 app:itemIconTint
作为图标,使用 app:itemTextColor
作为 textColors
示例:
drawable/navigation_text_color
:
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is used when the Navigation Item is checked -->
<item android:color="#009688" android:state_checked="true" />
<!-- This is the default text color -->
<item android:color="#E91E63" />
</selector>
和layout
:
<android.support.design.widget.NavigationView
.
.
app:itemTextColor="@drawable/navigation_text_color"/>
Finllay 我得到了答案,
您必须将颜色文件中的 colorAccent 更改为您想要的颜色:
<color name="colorAccent">whichever color required</color>
这个解决方案对我有用
如果你所说的动态是指以编程方式,你可以试试这个:
// FOR NAVIGATION VIEW ITEM TEXT COLOR
int[][] states = new int[][]{
new int[]{-android.R.attr.state_checked}, // unchecked
new int[]{android.R.attr.state_checked}, // checked
new int[]{} // default
};
// Fill in color corresponding to state defined in state
int[] colors = new int[]{
Color.parseColor("#747474"),
Color.parseColor("#007f42"),
Color.parseColor("#747474"),
};
ColorStateList navigationViewColorStateList = new ColorStateList(states, colors);
// apply to text color
navigationView.setItemTextColor(navigationViewColorStateList);
// apply to icon color
navigationView.setItemIconTintList(navigationViewColorStateList);
因此您可以为不同的设置定义多种颜色,例如白天或夜晚。
<android.support.design.widget.NavigationView
.
.
app:itemIconTint="@color/your_selector_file_name" // for Icon
app:itemTextColor="@color/your_selector_file_name" // for text
/>
添加@DAVOOD 所说的内容。下面的颜色选择器对我有用。
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This is used when the Navigation Item is checked -->
<item android:color="@color/tenoBrandColor" android:state_pressed="true" />
<!-- This is the default text color -->
<item android:color="@color/textprimary" />
</selector>
对于那些懒惰的人来说,有一个更简单的选择。
TL;DR: 只需创建一个新的 style
,其中 colorPrimary
是您想要的颜色,然后设置 NavigationView
theme
成为新的 style
.
只需创建一个新的 style
作为:
<style name="AppTheme.NoActionBar.NavigationView">
<item name="colorPrimary">@color/myDesiredColor</item>
</style>
这个style
会自动继承你的基础theme
(在我的例子中是AppTheme.NoActionBar
)然后你只需要设置你想要的colorPrimary
颜色.
那么您只需将 NavigationView
的 theme
设置为:
android:theme="@style/AppTheme.NoActionBar.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:headerLayout="@layout/nav_header_menu_test"
app:menu="@menu/main_drawer"
android:theme="@style/AppTheme.NoActionBar.NavigationView" />
您可以使用
以编程方式执行此操作MenuItemCompat.setIconTintMode(item, PorterDuff.Mode.DST)
其中 item
是您不需要色调的 MenuItem。