我正在使用谷歌最近在设计库25中引入的android底部布局导航样式。在我看到的所有教程和问题中,图标中的图像都是正常大小,但是我的版本非常小,尽管我保存到drawable文件夹的图像是72x72。这是一个截图:
图标应至少为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" />
由于
答案 0 :(得分:28)
图标大小在项目布局中硬编码为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>
检查guidelines bottom navigation是否有默认规格。
答案 1 :(得分:8)
使用您的首选值设置app:itemIconSize
属性。
答案 2 :(得分:5)
我会尝试使用Android Asset Studio给generate an generic icon,确保:
注意:如果您愿意,可以使用自定义图标。
然后它会生成相应的drawable与正确的目录(mdpi,hdpi,xhdpi,xxhdpi,xxxhdpi)。
在您的情况下具有静态可绘制尺寸(例如72x72)可能会根据手机的密度更改图标的大小,不同的手机会以不同方式转换像素。
只需简单地下载zip文件中的图标并将可绘制文件夹解压缩到资源目录,这可以解决您的问题。
答案 3 :(得分:3)
这里:
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);
}
您可以根据需要调整图像的大小。 快乐编码
答案 4 :(得分:1)
覆盖dimens.xml:
<dimen name="design_bottom_navigation_icon_size" tools:override="true">'your size in dp'</dimen>
答案 5 :(得分:1)
将这两行添加到底部导航中:
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
的值,以使文本不会重叠或获得过多的空格。
答案 6 :(得分:1)
在科特林中
对于那些想在 android-X 上尝试它并希望唯一一个项目改变其大小的人,这是我从@Minkoo 稍微修改了一下的代码
//代码从这里开始......
val bottomNavigationView: BottomNavigationView =findViewById(R.id.bottomNavigationView); val menuView: BottomNavigationMenuView = bottomNavigationView.getChildAt(0) as BottomNavigationMenuView
for (i in 0..menuView.getChildCount() - 1) {
if (i == 2) {
val iconView: View = menuView.getChildAt(i)
.findViewById(com.google.android.material.R.id.icon) as View
val layoutParams: ViewGroup.LayoutParams = iconView.getLayoutParams();
val displayMetrics: DisplayMetrics = getResources().getDisplayMetrics();
// set your height here
layoutParams.height =
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 38f, displayMetrics)
.toInt()
// set your width here
layoutParams.width =
TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 38f, displayMetrics)
.toInt()
iconView.setLayoutParams(layoutParams);
}
}