Изменить нижний значок навигации при нажатии - PullRequest
1 голос
/ 20 апреля 2020

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

Первое, что я сделал, это создал селектор, подобный этому

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:drawable="@drawable/chat_blue_24dp" android:state_checkable="true"/>
  <item android:drawable="@drawable/chat" android:state_checked="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/navigation_request"
    android:icon="@drawable/requests"
    android:title="@string/title_requests"
     />

<!--just here for test-->
<item
    android:id="@+id/navigation_chat"
    android:icon="@drawable/chat_selector"
    android:title="@string/title_chat"
     />
<item
    android:id="@+id/navigation_groups"
    android:icon="@drawable/ic_group_24dp"
    android:title="@string/title_groups"
     />

<item
    android:id="@+id/navigation_friends"
    android:icon="@drawable/friends"
    android:title="@string/title_friends"
     />

</menu>

но когда я запускаю код на моем устройстве, он не имеет никакого эффекта.

это мой BottomNavigation

<android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    app:labelVisibilityMode="unlabeled"
    android:layout_alignParentBottom="true"
    app:itemBackground="@color/white"
    app:menu="@menu/navigation" />

и это я, где я обрабатываю клики в моей деятельности

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
        = item -> {
    Fragment fragment;


    switch (item.getItemId()) {
        case R.id.navigation_request:
            getSupportActionBar().setTitle("Request");
            loadFragment(requestFragment);
            return true;

        case R.id.navigation_chat:
            // toolbar.setTitle("Chat");
            getSupportActionBar().setTitle("Chat");
            loadFragment(chatsFragment);
            return true;

        case R.id.navigation_friends:
            // toolbar.setTitle("Friends");
            getSupportActionBar().setTitle("Friends");
            loadFragment(friendsFragment);
            return true;

        case R.id.navigation_groups:
            // toolbar.setTitle("Chat");
            getSupportActionBar().setTitle("My Groups");
            loadFragment(groupsFragment);
            return true;

            default:
                return false;

    }
};

1 Ответ

0 голосов
/ 20 апреля 2020

Создание цветовой папки в разрешении

res -> Android Resource Directory -> color

Создание селектора цвета: navigation_state. xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true"
        android:color="@color/selected_color" />
    <item android:color="@color/normal_color" />
</selector>

Установка оттенка значка элемента и цвета текста.

<com.google.android.material.bottomnavigation.BottomNavigationView
   //***
    app:itemIconTint="@color/navigation_state"
    app:itemTextColor="@color/navigation_state"
  //***
  />

Я использовал дизайн материала. Не имеет значения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...