今天有个朋友反馈BottomNavigationView无法修改图片大小,于是看了一下网上确实是没找到解决方法。(只想看解决方案的可以看最后面)。
BottomNavigationView所有暴露的方法里面都没有设置图片大小的方法。
搜索了一下,stackoverflow有关于此问题的讨论并给出的当时的解决方案,但是现在已经无效了。 stackoverflow.com/questions/3…
这是为什么呢,因为本来图片尺寸就是是写死在dimen里面的,而当时正是利用了这个代码,硬是把dimen设置成了需要的大小。
到了这一步,相信大家心里都有点逼数了。BottomNavigationMenuView可以通过BottomNavigationView 获取到,BottomNavigationItemView我们可以通过BottomNavigationMenuView获取到,ImageView可以通过BottomNavigationItemView获取到,获取到了ImageView那不就是为所欲为了吗。直接把宽高设置了
/**
* 设置图片尺寸
* @param view
* @param width
* @param height
*/
public static void setImageSize(BottomNavigationView view,int width,int height) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
try {
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
ImageView imageView = item.findViewById(android.support.design.R.id.icon);
imageView.getLayoutParams().width = width;
imageView.getLayoutParams().height = height;
}
} catch (Exception e) {
e.printStackTrace();
}
}
复制代码
最后代码如下: 工具类
/**
* 新建一个BottomNavigationView帮助者类
*/
public class BottomNavigationViewHelper {
/**
* 设置图片尺寸
* @param view
* @param width
* @param height
*/
public static void setImageSize(BottomNavigationView view,int width,int height) {
BottomNavigationMenuView menuView = (BottomNavigationMenuView) view.getChildAt(0);
try {
for (int i = 0; i < menuView.getChildCount(); i++) {
BottomNavigationItemView item = (BottomNavigationItemView) menuView.getChildAt(i);
ImageView imageView = item.findViewById(android.support.design.R.id.icon);
imageView.getLayoutParams().width = width;
imageView.getLayoutParams().height = height;
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
复制代码
activity里面调用(这里为了方便我直接随便写了个数,开发中建议从dimen里面读取
//动态设置图片大小
BottomNavigationViewHelper.setImageSize(home_tab_nv,80,80)
复制代码
后续:朋友反馈当图片太大的时候会与文字重叠。因为导航栏高度也是写死的
<dimen name="design_bottom_navigation_height">60dp</dimen>
复制代码