studio programacion herramientas fundamentos con avanzado aplicaciones android material-design navigationbar

programacion - manual de android en pdf



Color de la pestaƱa seleccionada en la Vista de navegaciĆ³n inferior (7)

Estoy agregando un BottomNavigationView a un proyecto, y me gustaría tener un color de texto (y tinte de ícono) diferente para la pestaña seleccionada (para lograr el efecto de pestañas no seleccionadas). Usar un color diferente con android:state_selected="true" en un archivo de recursos de selector de color no parece funcionar. También intenté tener entradas de elementos adicionales con android:state_focused="true" o android:state_enabled="true" , desafortunadamente no tuvo efecto. También intenté establecer el atributo state_selected en falso (explícitamente) para el color predeterminado (no seleccionado), sin suerte.

Así es como agrego la vista a mi diseño:

<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/silver" app:itemIconTint="@color/bnv_tab_item_foreground" app:itemTextColor="@color/bnv_tab_item_foreground" app:menu="@menu/bottom_nav_bar_menu" />

Aquí está mi selector de color ( bnv_tab_item_foreground.xml ):

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

Y mi recurso de menú ( bottom_nav_bar_menu.xml ):

<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/action_home" android:icon="@drawable/ic_local_taxi_black_24dp" android:title="@string/home" /> <item android:id="@+id/action_rides" android:icon="@drawable/ic_local_airport_black_24dp" android:title="@string/rides"/> <item android:id="@+id/action_cafes" android:icon="@drawable/ic_local_cafe_black_24dp" android:title="@string/cafes"/> <item android:id="@+id/action_hotels" android:icon="@drawable/ic_local_hotel_black_24dp" android:title="@string/hotels"/> </menu>

Apreciaría cualquier ayuda.


Al hacer un selector , mantenga siempre el estado predeterminado al final, de lo contrario solo se usaría el estado predeterminado. Debe reordenar los elementos en su selector como:

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

Y el estado que se utilizará con BottomNavigationBar es state_checked no state_selected .


Es demasiado tarde para la respuesta pero útil para cualquiera. Estaba cometiendo un error muy tonto, estaba usando bottom_color_nav.xml para Seleccionar y deseleccionar el cambio de color. Todavía no obtengo el color adecuado en BottomNavigation.

Entonces me doy cuenta de que me devolvieron falso en onNavigationItemSelected Method que solo se emitió con mi código.


Esto funcionará:

setItemBackgroundResource(android.R.color.holo_red_light)


Intente usar android:state_enabled lugar de android:state_selected para los atributos del elemento selector.


Si desea cambiar los colores de los iconos y textos mediante programación:

ColorStateList iconsColorStates = new ColorStateList( new int[][]{ new int[]{-android.R.attr.state_checked}, new int[]{android.R.attr.state_checked} }, new int[]{ Color.parseColor("#123456"), Color.parseColor("#654321") }); ColorStateList textColorStates = new ColorStateList( new int[][]{ new int[]{-android.R.attr.state_checked}, new int[]{android.R.attr.state_checked} }, new int[]{ Color.parseColor("#123456"), Color.parseColor("#654321") }); navigation.setItemIconTintList(iconsColorStates); navigation.setItemTextColor(textColorStates);


BottomNavigationView usa colorPrimary del tema aplicado para la pestaña seleccionada y uses android:textColorSecondary para el tinte del icono de la pestaña inactiva.

Por lo tanto, puede crear un estilo con el color primario preferido y configurarlo como tema para su BottomNavigationView en un archivo de diseño xml.

styles.xml :

<style name="BottomNavigationTheme" parent="Theme.AppCompat.Light"> <item name="colorPrimary">@color/active_tab_color</item> <item name="android:textColorSecondary">@color/inactive_tab_color</item> </style>

your_layout.xml :

<android.support.design.widget.BottomNavigationView android:id="@+id/navigation" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="?android:attr/windowBackground" android:theme="@style/BottomNavigationTheme" app:menu="@menu/navigation" />


1. Dentro de resolución crear carpeta con color de nombre (como dibujable)

2. Haga clic derecho en la carpeta de color. Seleccione nuevo-> archivo de recursos de color-> crear archivo color.xml (bnv_tab_item_foreground) (Figura 1: Estructura del archivo)

3. Copie y pegue bnv_tab_item_foreground

<android.support.design.widget.BottomNavigationView android:id="@+id/navigation" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginEnd="0dp" android:layout_marginStart="0dp" app:itemBackground="@color/appcolor"//diffrent color app:itemIconTint="@color/bnv_tab_item_foreground" //inside folder 2 diff colors app:itemTextColor="@color/bnv_tab_item_foreground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/navigation" />

bnv_tab_item_foreground:

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

Figura 1: Estructura del archivo: