Изменение навигации Просмотр цвета элемента Динамически Android
Я хотел бы создать ящик для навигации, где каждый элемент имеет другой цвет выделения (цвет значка и цвет текста), поскольку в магазине воспроизведения Google есть:
![enter image description here]()
Я не уверен, как они решили это, я думаю, что они используют разные действия с разными ящиками. Я хочу использовать фрагменты, и я хочу изменить цвет значка и цвет текста. Любые идеи, как я могу это сделать? Я использую библиотеку поддержки дизайна google и макет ящика с видом навигации.
Ответы
Ответ 1
используйте app:itemIconTint
в NavigationView
для значков и используйте 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"/>
Ответ 2
Если динамически вы имеете в виду программно, вы можете попробовать следующее:
// 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);
Таким образом, вы можете определить несколько цветов для разных настроек, таких как День или Ночь.
Ответ 3
Finllay я получил ответ,
Вы должны изменить colorAccent в файле цветов, который вам нужен всегда:
<color name="colorAccent">whichever color required</color>
Это решение сработало для меня
Ответ 4
<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>
Ответ 5
Там более простой вариант для ленивых.
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" />