Android - Изменение цвета значка и названия каждой вкладки внизу навигации - PullRequest
1 голос
/ 30 октября 2019

Я пытаюсь сделать навигацию снизу немного хитрее. Действительно, я хочу этот вид нижней навигации: bottom_nav_1 bottom_nav_2 Каждая вкладка имеет свой цвет при выборе. Например, мера будет красным при выборе (значок и заголовок), а профиль будет зеленым при выборе ...
Поэтому я попытался использовать селектор для элемента (в моем меню)
Но цвет не применяется,Значок успешно изменился (я пытался поставить совершенно другой значок, когда выбран элемент), но не цвет заголовка вкладки.
Я попытался удалить 2 свойства из нижней навигации:

app:itemTextColor="@color/black"
app:itemIconTint="@color/black"

Но становится все хуже, потому что цвет моего тематического приложения (основного) применяется при выборе вкладки.

Моя нижняя навигация:

<com.google.android.material.bottomnavigation.BottomNavigationView
                android:id="@+id/bottom_navigation"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:background="@color/white"
                app:menu="@menu/main_bottom_navigation"
                style="@style/BottomNavigationView"
                app:labelVisibilityMode="labeled"
                android:layout_alignParentBottom="true" />

Один из моих селекторов (логика)применяется ко всем пунктам):

<selector xmlns:android="http://schemas.android.com/apk/res/android">

    <!-- Pressed state -->
    <item android:drawable="@drawable/bottom_bar_journal_on"
            android:color="@color/red_FF623E"
            android:state_checked="true"/>
    <!-- Default state -->
    <item android:drawable="@drawable/bottom_bar_journal_off"
            android:color="@color/background_yellow"
            android:state_checkable="false"/>

</selector>

И мое меню (где я применяю весь свой селектор):

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
            android:id="@+id/action_journal"
            android:enabled="true"
            android:icon="@drawable/bottom_bar_journal"
            android:title="@string/main_menu_journal"
            app:showAsAction="withText" />

    <item
            android:id="@+id/action_measure"
            android:enabled="true"
            android:icon="@drawable/bottom_bar_measure_off"
            android:title="@string/main_menu_measure"
            app:showAsAction="withText" />

    <item
            android:id="@+id/action_add"
            android:enabled="false"
            android:title=""
            app:showAsAction="withText" />

    <item
            android:id="@+id/action_treatment"
            android:enabled="true"
            android:icon="@drawable/bottom_bar_treatment_off"
            android:title="@string/main_menu_treatment" />

    <item
            android:id="@+id/action_profile"
            android:enabled="true"
            android:icon="@drawable/bottom_bar_profile"
            android:title="@string/main_menu_profile"
            app:showAsAction="withText" />
</menu>

1 Ответ

0 голосов
/ 30 октября 2019

И вы должны использовать это в своем BottomNavigationView:

<com.google.android.material.bottomnavigation.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@color/white"
app:itemIconTint="@drawable/bottom_navigation_colors"
app:itemTextColor="@drawable/bottom_navigation_colors"
app:menu="@menu/bottom_navigation_menu" />

Приложение : itemIconTint и app: itemTextColor вместо ColorStateList вместо ColorStateListцвет. Это означает, что вы можете написать селектор для этих цветов, который реагирует на изменения состояния элементов.

Например, у вас может быть bottom_navigation_colors.xml ColorStateList, который содержит:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item
      android:state_checked="true"
      android:color="@color/colorPrimary" />
  <item
      android:state_checked="false"
      android:color="@color/grey" />
 </selector>

используется Стиль цветных материалов

style="@style/Widget.MaterialComponents.BottomNavigationView.Colored"

Также проверьте эту ссылку: Практические занятия с компонентами материала

Также изменитеЦвет программным способом выглядит следующим образом:

getMenuInflater().inflate(R.menu.menu_home, menu);
        Drawable drawable = menu.findItem(R.id.action_clear).getIcon();

        drawable = DrawableCompat.wrap(drawable);
        DrawableCompat.setTint(drawable, ContextCompat.getColor(this,R.color.textColorPrimary));
        menu.findItem(R.id.action_clear).setIcon(drawable);
        return true;

Или:

bottomNavigationView.setOnNavigationItemSelectedListener(
        new BottomNavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem item) {
                switch (item.getItemId()) {
                    case R.id.action_favorites:
                        //need change color of favotites here.
                    case R.id.action_schedules:

                    case R.id.action_music:

                }
                return true;
            }
        });
...