MISE À JOUR du 8 mai 2018
Vous pouvez utiliser app:labelVisibilityMode="labeled"
directement dans <android.support.design.widget.BottomNavigationView />
Source : https://developer.Android.com/reference/com/google/Android/material/bottomnavigation/LabelVisibilityMode
Pas besoin de cette longue solution ci-dessous.
RÉPONSE PRÉCÉDENTE
J'ai eu un comportement bizarre avec le BottomNavigationView. Lorsque je sélectionnais un élément/fragment, le fragment poussait la BottomNavigationView un peu plus bas, de sorte que le texte de la BottomNavigationView descendait en dessous de l'écran, de sorte que seules les icônes étaient visibles et que le texte était masqué lorsque je cliquais sur un élément.
Si vous êtes confronté à ce comportement étrange, voici la solution. Il suffit de supprimer
android:fitsSystemWindows="true"
dans votre disposition racine du fragment. Il suffit de le supprimer et boum ! BottomNavigationView fonctionnera bien, maintenant il peut être montré avec du texte et une icône. J'avais ceci dans mon Root CoordinatorLayout du fragment.
N'oubliez pas non plus d'ajouter
BottomNavigationViewHelper.removeShiftMode(bottomNavigationView);
dans votre activité pour désactiver le mode décalage.
Voici cette classe :
public class BottomNavigationViewHelper {
@SuppressLint("RestrictedApi")
public static void removeShiftMode(BottomNavigationView view) {
//this will remove shift mode for bottom navigation 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);
item.setShiftingMode(false);
// set once again checked value, so view will be updated
item.setChecked(item.getItemData().isChecked());
}
} catch (NoSuchFieldException e) {
Log.e("ERROR NO SUCH FIELD", "Unable to get shift mode field");
} catch (IllegalAccessException e) {
Log.e("ERROR ILLEGAL ALG", "Unable to change value of shift mode");
}
}
}
0 votes
Dans votre menu bottom_navigation_main.xml, si vous avez Android:showAsAction="ifRoom" changez-le en Android:showAsAction="always" pour chaque élément.
0 votes
Non, ça n'a pas marché. J'avais déjà essayé.
0 votes
Pouvez-vous montrer votre fichier xml de menu
1 votes
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:Android=" schémas.Android.com/apk/res/Android " xmlns:app=" schémas.Android.com/apk/res-auto "> <item Android:id="@+id/action_favorites" app:showAsAction="always" /> <item Android:id="@+id/action_schedules" app:showAsAction="always" /> <item Android : id="@+id/action_music" app:showAsAction="always" /> <item Android:id="@+id/account" Android:enabled="true" app:showAsAction="always" /> </menu>'
0 votes
Duplicata possible de Comment désactiver le mode de décalage du BottomNavigationView ?
8 votes
Placez app:labelVisibilityMode="labeled" dans BottomNavigationView.
1 votes
LabelVisibilityMode a fait l'affaire pour moi ! Merci beaucoup !
1 votes
Question très utile. Merci