BottomNavigationView图片大小设置

今天有个朋友反馈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>
复制代码
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值