Как увеличить размер значка в макете навигации в Android?

Я использую стиль навигации нижнего макета в Android, который недавно был представлен Google в библиотеке дизайна 25. Во всех уроках и вопросах, которые я вижу, изображения на их значках имеют нормальный размер, но мои очень малы, несмотря на то, что изображение, которое я сохраняю в папку для рисования, имеет размер 72х72. Вот скриншот:

enter image description here

Значки должны быть как минимум в 2, может быть, даже в 3 раза больше. Как мне это сделать? Вот мой код в моем bottom_layout.xml:

  <?xml version="1.0" encoding="utf-8"?>

 <menu xmlns:android="http://schemas.android.com/apk/res/android"

   xmlns:app="http://schemas.android.com/apk/res-auto">
  <item
    android:id="@+id/menu_home"
    android:title="test"
    android:icon="@drawable/tabbarglossary"
    app:showAsAction="always|withText"
    />
  <item
    android:id="@+id/menu_search"
    android:title="test2"
    android:icon="@drawable/mediationtabbar"
    app:showAsAction="always|withText"
    />

  <item
    android:id="@+id/menu_notifications"
    android:title="test3"
    android:icon="@drawable/ic_action_name"
    app:showAsAction="always|withText"
    />

</menu>

и в моем activity_main.xml:

 <android.support.design.widget.BottomNavigationView
    android:id="@+id/navigation"
    android:layout_width="match_parent"
    android:layout_height="80dp"
    android:layout_alignParentBottom="true"
    android:layout_gravity="bottom"
    android:layout_marginBottom="0dp"
    android:layout_marginLeft="0dp"
    android:layout_marginRight="0dp"
    android:focusable="false"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    design:menu="@menu/bottom_layout" />

Спасибо

Ответ 1

Размер значка жестко закодирован до 24dp в макете элементов (см. design_bottom_navigation_item.xml) Это можно изменить программно:

BottomNavigationView bottomNavigationView = (BottomNavigationView) activity.findViewById(R.id.bottom_navigation_view);
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);
    final ViewGroup.LayoutParams layoutParams = iconView.getLayoutParams();
    final DisplayMetrics displayMetrics = getResources().getDisplayMetrics();
    // set your height here
    layoutParams.height = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
    // set your width here
    layoutParams.width = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 32, displayMetrics);
    iconView.setLayoutParams(layoutParams);
}

ИЗМЕНИТЬ

Для вашей проблемы, что значок охватывает ваш текст:

Вы можете переопределить некоторые значения по умолчанию для нижнего навигационного представления. Например высота.

<dimen name="design_bottom_navigation_height" tools:override="true">56dp</dimen>

Отметьте рекомендации в нижней части навигации для стандартных спецификаций.

Ответ 2

установите свойство app:itemIconSize с вашим предпочтительным значением.

Ответ 3

Я бы попробовал использовать Android Asset Studio, чтобы сгенерировать для вас общий значок, убедитесь, что:

  • Размер иконки 24dp
  • Имеет отступ 0dp

Примечание: вы можете использовать пользовательский значок, если вы хотите это сделать.

icon generator

Затем он сгенерирует вам соответствующий файл drawable с правильным каталогом (mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi).

Наличие статических размеров для рисования, таких как 72x72 в вашем случае, может изменить размер значка в зависимости от плотности вашего телефона, разные телефоны будут переводить пиксели по-разному.

Просто загрузите значки в zip файл и извлеките папки для рисования в каталог ресурсов, это должно решить вашу проблему.

Ответ 4

Здесь:

BottomNavigationView bottomNavigationView = (BottomNavigationView) 
configurationActivity.findViewById(R.id.bottom_navigation_view);
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);
     final ViewGroup.LayoutParams layoutParams = 
iconView.getLayoutParams();
     final DisplayMetrics displayMetrics = 
getResources().getDisplayMetrics();
layoutParams.height = (int) 
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, 
displayMetrics);
layoutParams.width = (int) 
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 20, 
 displayMetrics);
iconView.setLayoutParams(layoutParams);
}

вы можете настроить размер изображений так, как хотите. Счастливое кодирование

Ответ 5

переопределить в измерениях. xml:

<dimen name="design_bottom_navigation_icon_size" tools:override="true">'your size in dp'</dimen>

Ответ 6

Добавьте эти две строки в нижнюю навигацию:

app:menu="@menu/main_bottom_navigation"
app:itemIconSize="@dimen/bottom_navigation_icon_size"

В dimens.xml добавить:

<dimen name="bottom_navigation_icon_size" tools:override="true">32dp</dimen>
<dimen name="design_bottom_navigation_height" tools:override="true">72dp</dimen>

Чтобы увеличить размер значков, увеличьте bottom_navigation_icon_size. Возможно, вам придется изменить значение design_bottom_navigation_height чтобы текст не перекрывался или вы получали слишком много design_bottom_navigation_height пространства.