Cómo deshabilitar BottomNavigationView modo de cambio?
BottomNavigationView no muestra el título del menú que está inactivo.
Cómo mostrar los títulos de todos los elementos del menú en bottomNavigationBar? El problema es que en mi caso sólo se muestra el título del elemento al que se hace clic.
- Más de 3 elementos en la barra de navegación inferior android
- ¿Por qué Android BottomNavigationView no aparece?
- Android: Vista inferior de navegación - cambia el icono del elemento seleccionado
- Insignia en BottomNavigationView
- Mostrar insignia en la parte superior del icono de la barra de navegación inferior
- Desmarque TODOS los elementos de BottomNavigationView sin elemento ficticio o Reflexión
- Establecer el elemento seleccionado en Android BottomNavigationView
- ¿Cómo puedo añadir elevación (sombra) a mi BottomNavigationView. No viene por defecto
- Establecer menú predeterminado para BottomNavigationView
- BottomNavigationView deshabilita el modo de cambio sin usar la reflexión
- Android BottomNavigationView iconos espaciados uniformemente
- Eliminar etiquetas BottomNavigationView
- Fragmento creado de nuevo en la parte inferior de la vista de navegación seleccionada
La implementación de BottomNavigationView
tiene condición: cuando hay más de 3 elementos, utilice el modo de cambio.
En este momento no se puede cambiar a través de la API existente y la única manera de desactivar el modo de cambio es utilizar la reflexión.
Necesitará una clase de ayuda:
import android.support.design.internal.BottomNavigationItemView; import android.support.design.internal.BottomNavigationMenuView; import android.support.design.widget.BottomNavigationView; import android.util.Log; import java.lang.reflect.Field; public class BottomNavigationViewHelper { public static void disableShiftMode(BottomNavigationView view) { BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0); try { Field shiftingMode = menuView.getClass().getDeclaredField("mShiftingMode"); shiftingMode.setAccessible(true); shiftingMode.setBoolean(menuView, false); shiftingMode.setAccessible(false); for (int i = 0; i < menuView.getChildCount(); i++) { BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i); //noinspection RestrictedApi item.setShiftingMode(false); // set once again checked value, so view will be updated //noinspection RestrictedApi item.setChecked(item.getItemData().isChecked()); } } catch (NoSuchFieldException e) { Log.e("BNVHelper", "Unable to get shift mode field", e); } catch (IllegalAccessException e) { Log.e("BNVHelper", "Unable to change value of shift mode", e); } } }
Y luego aplicar el método disableShiftMode
en su BottomNavigationView
, pero recuerde si está inflando la vista de menú de su código, tiene que ejecutarlo después de inflar.
Ejemplo de uso:
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation_bar); BottomNavigationViewHelper.disableShiftMode(bottomNavigationView);
PD.
Recuerde, tendrá que ejecutar este método cada vez que cambie los elementos del menú en su BottomNavigationView
.
ACTUALIZAR
También necesita actualizar el archivo de configuración proguard (por ejemplo proguard-rules.pro), el código anterior usa la reflexión y no funcionará si proguard ofuscar el campo mShiftingMode
.
-keepclassmembers class android.support.design.internal.BottomNavigationMenuView { boolean mShiftingMode; }
Gracias Muhammad Alfaifi por señalar este problema y proporcionar un fragmento .
Para deshabilitar la animación de texto, también puedes usarla en tu archivo dimens.xml:
<dimen name="design_bottom_navigation_active_text_size">12sp</dimen>
- ¿Se pueden ejecutar aplicaciones Linux en Android?
- Android adb shell am broadcast: nombre de componente incorrecto