Я заглянул в 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);
}
}
}
Вы можете попробовать добавить 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"/>
Я использую варианты приведенного ниже кода для настройки меток 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, это удаляет текст, но изображения все еще не централизованы, мне нужно знать способ централизованных изображений в нижней навигации после удаления текста
@ Kirmani88 Я думаю, вы имеете в виду вертикально. Вы также пробовали установить высоту меток равной 0?
Да, я хочу, чтобы он центрировался по вертикали, не могли бы вы рассказать мне, как установить высоту меток на 0?
все еще не выровнен по вертикали :(
Проверьте мой отредактированный ответ. Вы можете изменить числа для заполнения (40) и размера (32) по своему желанию.
попробуйте использовать эти атрибуты:
showUnselectedLabels: false
showSelectedLabels: false
Может быть, тогда это поможет: stackoverflow.com/a/40188794/7143587