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

을 imporve하는 당신은 온 클릭 아이콘을 재설정해야하고 스위치 케이스에 당신은 단지 하나의 당신을 설정해야 변경할 필요가 있으므로 아이콘을 변경해야만 변경됩니다.

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

'item'을 선언하는 코드 조각을 명시 적으로 추가하는 것이 도움이 될 것이라고 생각합니다. MenuItem item = menu.findItem (R.id.action_favorites); – larrytech

+0

나는이 코드를 시도 할 것이지만 다른 아이콘을 클릭하면 아이콘을 채우거나 채우지 않는 기본 아이콘이 설정되지 않는다. –

1

답을 찾았습니다. 우리는

item.setIcon(R.drawable.icon_name) 

아이콘을 변경하는 데 사용할 수 있습니다 .. 노력할 것입니다 대답을

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

당신은 단순히 당김 폴더에 그릴 수 선택기를 만들 수 있습니다 이미지가 선택기를 작성하고 각 상태에 대한 당김을 지정보기

<?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_selected가 아닌'android : state_checked'입니다. – 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 항목의 아이콘을 변경하기위한 선택기 드로어 블을 추가했습니다.

+0

Thnx 작업. –