107 votes

Supprimer les étiquettes BottomNavigationView

Google a publié une nouvelle bibliothèque de support v25 avec BottomNavigationView

entrez la description de l'image ici

y at-il un moyen de supprimer les étiquettes des éléments?

280voto

Abdul-Aziz-Niazi Points 601

J'espère que je ne suis pas trop en retard pour la fête ici.

Mais à partir de Design Support Library 28.0.0-alpha1, vous pouvez utiliser la propriété

 app:labelVisibilityMode="unlabeled"
 

BottomNavigationView sans étiquettes

vous pouvez également utiliser d'autres valeurs "auto", "étiqueté" et "sélectionné".

22voto

ittianyu Points 389

Voudriez-vous ce style?

Si oui, je vous recommande d'essayer BottomNavigationViewEx .

18voto

Sanf0rd Points 2472

Malheureusement, cette première version de BottomNavigationView est venu avec beaucoup de limitations. Et pour l'instant vous ne pouvez pas supprimer les titres à l'aide de la conception de l'appui de l'API. Donc pour résoudre cette limitation alors que google n'a pas la mettre en œuvre, vous pouvez le faire (par réflexion):

1. Définir les titres vides de bottom_navigation_menu.xml fichier.

2. Étend la BottomNavigationView:

    public class MyBottomNavigationView extends BottomNavigationView {

      public MyBottomNavigationView(Context context, AttributeSet attrs) {
          super(context, attrs);
          centerMenuIcon();
      }

      private void centerMenuIcon() {
          BottomNavigationMenuView menuView = getBottomMenuView();

          if (menuView != null) {
              for (int i = 0; i < menuView.getChildCount(); i++) {
                BottomNavigationItemView menuItemView = (BottomNavigationItemView) menuView.getChildAt(i);

                AppCompatImageView icon = (AppCompatImageView) menuItemView.getChildAt(0);

                FrameLayout.LayoutParams params = (LayoutParams) icon.getLayoutParams();
                params.gravity = Gravity.CENTER;

                menuItemView.setShiftingMode(true);
              }
          }
      }

      private BottomNavigationMenuView getBottomMenuView() {
          Object menuView = null;
          try {
              Field field = BottomNavigationView.class.getDeclaredField("mMenuView");
              field.setAccessible(true);
              menuView = field.get(this);
          } catch (NoSuchFieldException | IllegalAccessException e) {
              e.printStackTrace();
          }

          return (BottomNavigationMenuView) menuView;
      }
    }

3. Ajouter à la layout.xml cette customView

Pour plus de détails, j'ai mis en œuvre ce sur Github

11voto

Nikola Despotoski Points 13670

Approche sans réflexion:

 private void removeTextLabel(@NonNull BottomNavigationView bottomNavigationView, @IdRes int menuItemId) {
    View view = bottomNavigationView.findViewById(menuItemId);
    if (view == null) return;
    if (view instanceof MenuView.ItemView) {
        ViewGroup viewGroup = (ViewGroup) view;
        int padding = 0;
        for (int i = 0; i < viewGroup.getChildCount(); i++) {
            View v = viewGroup.getChildAt(i);
            if (v instanceof ViewGroup) {
                padding = v.getHeight();
                viewGroup.removeViewAt(i);
            }
        }
        viewGroup.setPadding(view.getPaddingLeft(), (viewGroup.getPaddingTop() + padding) / 2, view.getPaddingRight(), view.getPaddingBottom());
    }
}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X