7

Я добавил BottomNavigationView в свое приложение вроде.Android: нижний вид навигации - значок изменения выбранного элемента

main.xml

<android.support.design.widget.BottomNavigationView 
     android:id="@+id/bottom_navigation" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     app:itemBackground="@color/colorPrimary" 
     app:itemIconTint="@color/white" 
     app:itemTextColor="@color/white" 
     app:menu="@menu/bottom_navigation_main" /> 

bottom_navigation_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto"> 
    <item 
     android:id="@+id/action_favorites" 
     android:enabled="true" 
     android:icon="@drawable/ic_favorite_white_24dp" 
     android:title="@string/text_favorites" 
     app:showAsAction="ifRoom" /> 
    <item 
     android:id="@+id/action_schedules" 
     android:enabled="true" 
     android:icon="@drawable/ic_access_time_white_24dp" 
     android:title="@string/text_schedules" 
     app:showAsAction="ifRoom" /> 
    <item 
     android:id="@+id/action_music" 
     android:enabled="true" 
     android:icon="@drawable/ic_audiotrack_white_24dp" 
     android:title="@string/text_music" 
     app:showAsAction="ifRoom" /> 
</menu> 

MainActivity нажмите

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

        case R.id.action_music: 

       } 
       return true; 
      } 
     }); 

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

(если пользователь нажал один элемент то происходит изменение значка на другой)

ответ

7

необходимо перезагрузить значок OnClick, а затем на корпусе переключателя необходимо установить только тот, который вы необходимо изменить, так что только при выборе значка изменится.

Menu menu = bottomNavigationView.getMenu(); 
menu.findItem(R.id.action_favorites).setIcon(favDrawable); 

switch (item.getItemId()) { 
       case R.id.action_favorites: 
        item.setIcon(favDrawableSelected); 
       case R.id.action_schedules: 
       case R.id.action_music: 
      } 
+0

Я думаю, что было бы полезно явно добавить этот фрагмент кода, объявляющий «элемент». ItemItem item = menu.findItem (R.id.action_favorites); – larrytech

+0

Я попробую этот код, это работает, но когда я нажимаю другой значок, тогда он не установлен по умолчанию, как значок заливки или не заполняет значок –

1

Найдено ответ. мы можем использовать

item.setIcon(R.drawable.icon_name) 

изменить значок .. попытается imporve ответа

bottomNavigationView.setOnNavigationItemSelectedListener(
      new BottomNavigationView.OnNavigationItemSelectedListener() { 
       @Override 
       public boolean onNavigationItemSelected(@NonNull MenuItem item) { 
        switch (item.getItemId()) { 
         case R.id.action_favorites: 
          //change the icon 
         item.setIcon(R.drawable.icon_name); 
         case R.id.action_schedules: 

         case R.id.action_music: 

        } 
        return true; 
       } 
      }); 
12

Вы можете просто создать Drawable селектора в вытяжке папки и изображения могут быть изменены в зависимости от состояния виджета, используемого в целях

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/calender_green" android:state_checked="true"/> 
    <item android:drawable="@drawable/calender_black" android:state_checked="false"/> 
</selector> 
+7

Это работает лучше, чем программный метод. Состояние для указания на самом деле 'android: state_checked' не' android: state_selected' – Yuntao

+0

Где применить это? –

0

Создать селектор и указать вытяжку для каждого состояния (например, проверяется и непроверенные состояния)

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/calender_green" android:state_checked="true"/> 
    <item android:drawable="@drawable/calender_black" android:state_checked="false"/> 
</selector> 
+1

кажется, что он не работает –

3

Если вышеуказанные решения не работают для вас, чтобы изменить выбранный значок элемента добавьте ниже строки в код:

bottomNavigationView.setItemIconTintList(null); 

Это отключит эффект оттенка выбранного элемента.

У меня была та же проблема. Я добавил селектор, предназначенный для изменения значка элемента BottomNavigationView, когда он установлен/выбран.

+0

Работает отлично Thnx. –

 Смежные вопросы

  • Нет связанных вопросов^_^