BottomNavigationView图片大小设置

4,492 阅读2分钟

今天有个朋友反馈BottomNavigationView无法修改图片大小,于是看了一下网上确实是没找到解决方法。(只想看解决方案的可以看最后面)。

BottomNavigationView所有暴露的方法里面都没有设置图片大小的方法。

搜索了一下,stackoverflow有关于此问题的讨论并给出的当时的解决方案,但是现在已经无效了。 stackoverflow.com/questions/3…

这是为什么呢,因为本来图片尺寸就是是写死在dimen里面的,而当时正是利用了这个代码,硬是把dimen设置成了需要的大小。

但是打开最新的源码。哪里还看得到iconSize的影子。谷歌大大为了统一icon大小也是用心良苦啊

既然官方已经把尺寸修改也封掉,那只能继续寻找解决方案。可以看到BottomNavigationView包含了一个BottomNavigationMenuView
BottomNavigationMenuView里面包含多个BottomNavigationItemView,而BottomNavigationMenuView会将彻底进来的图片列表遍历交给BottomNavigationItemView显示出来
打开BottomNavigationItemView文件,看到了关于icon组件的声明。

到了这一步,相信大家心里都有点逼数了。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里面加入一句设置design_bottom_navigation_height大小

  <dimen name="design_bottom_navigation_height">60dp</dimen>