Подтвердить что ты не робот

Изменение навигации Просмотр цвета элемента Динамически Android

Я хотел бы создать ящик для навигации, где каждый элемент имеет другой цвет выделения (цвет значка и цвет текста), поскольку в магазине воспроизведения Google есть:

enter image description here

Я не уверен, как они решили это, я думаю, что они используют разные действия с разными ящиками. Я хочу использовать фрагменты, и я хочу изменить цвет значка и цвет текста. Любые идеи, как я могу это сделать? Я использую библиотеку поддержки дизайна google и макет ящика с видом навигации.

4b9b3361

Ответ 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" />