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: