Как удалить заголовок из нижней части навигации

Я заглянул в stackoverflow и нашел решение, как удалить анимацию из bottom navigation. по умолчанию.

Теперь мне нужно удалить заголовок из нижней части навигации. Я установил пустую строку в заголовке XML-файла с нижней навигацией, но это не меняет положение изображений. Я работаю с v27

Мне нужно центрировать изображения в bottom navigation. после удаления текста.

Это мой код.

 //OnCreate 

        BottomNavigationViewHelper.removeShiftMode(bottomNavigationView);

Статический класс внутри MainActivity

public static class BottomNavigationViewHelper {
    @SuppressLint("RestrictedApi")
    public static void removeShiftMode(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("BottomNav", "Unable to get shift mode field", e);
        } catch (IllegalAccessException e) {
            Log.e("BottomNav", "Unable to change value of shift mode", e);
        }
    }
}
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
1 706
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете попробовать добавить app: labelVisibilityMode в "unlabeled"

 <android.support.design.widget.BottomNavigationView
        android:id = "@+id/navigation"
        android:layout_width = "match_parent"
        android:layout_height = "wrap_content"
        app:labelVisibilityMode = "unlabeled"/>

Может быть, тогда это поможет: stackoverflow.com/a/40188794/7143587

tijn167 17.12.2018 16:00
Ответ принят как подходящий

Я использую варианты приведенного ниже кода для настройки меток BottomNavigationView, которые по сути являются TextView:

private void removeBottomNavigationLabels(BottomNavigationView bottomNavigationView) {
    for (int i = 0; i < bottomNavigationView.getChildCount(); i++) {
        View item = bottomNavigationView.getChildAt(i);

        if (item instanceof BottomNavigationMenuView) {
            BottomNavigationMenuView menu = (BottomNavigationMenuView) item;

            for (int j = 0; j < menu.getChildCount(); j++) {
                View menuItem = menu.getChildAt(j);

                View small = menuItem.findViewById(android.support.design.R.id.smallLabel);
                if (small instanceof TextView) {
                    ((TextView) small).setVisibility(View.GONE);
                }
                View large = menuItem.findViewById(android.support.design.R.id.largeLabel);
                if (large instanceof TextView) {
                    ((TextView) large).setVisibility(View.GONE);
                }
            }
        }
    }

    BottomNavigationMenuView menuView = (BottomNavigationMenuView) bottomNavigationView.getChildAt(0);
    for (int i = 0; i < menuView.getChildCount(); i++) {
        final View iconView = menuView.getChildAt(i).findViewById(android.support.design.R.id.icon);
        iconView.setPadding(0, 40, 0, 0);
        ViewGroup.LayoutParams layoutParams = iconView.getLayoutParams();
        DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
        layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
        layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
        iconView.setLayoutParams(layoutParams);
    }
}

Вы можете назвать это так:

removeBottomNavigationLabels(yourBottomNavigationView); 

Вы также можете попробовать изменить видимость, заполнение или высоту TextViews.

Спасибо @forpas, это удаляет текст, но изображения все еще не централизованы, мне нужно знать способ централизованных изображений в нижней навигации после удаления текста

dev90 18.12.2018 11:53

@ Kirmani88 Я думаю, вы имеете в виду вертикально. Вы также пробовали установить высоту меток равной 0?

forpas 18.12.2018 11:55

Да, я хочу, чтобы он центрировался по вертикали, не могли бы вы рассказать мне, как установить высоту меток на 0?

dev90 18.12.2018 12:09

все еще не выровнен по вертикали :(

dev90 18.12.2018 12:58

Проверьте мой отредактированный ответ. Вы можете изменить числа для заполнения (40) и размера (32) по своему желанию.

forpas 18.12.2018 13:33

попробуйте использовать эти атрибуты:

showUnselectedLabels: false
showSelectedLabels: false

Другие вопросы по теме