zoukankan      html  css  js  c++  java
  • 设置BottomNavigationBar导航栏的间距和文字,图片大小

    找了好久都没有找到怎么设置导航栏的文字大小和图片大小。后来朋友给推荐使用反射的方式很好用。特意保存下来,以备不时之需。

    朋友博客地址

    private void setBottomNavigationItem(int space, int imgLen) {
            float contentLen = 36;
            Class barClass = bottomNavigationBar.getClass();
            Field[] fields = barClass.getDeclaredFields();
            for (int i = 0; i < fields.length; i++) {
                Field field = fields[i];
                field.setAccessible(true);
                if (field.getName().equals("mTabContainer")) {
                    try { //反射得到 mTabContainer
                        LinearLayout mTabContainer = (LinearLayout) field.get(bottomNavigationBar);
                        for (int j = 0; j < mTabContainer.getChildCount(); j++) {
                            //获取到容器内的各个 Tab
                            View view = mTabContainer.getChildAt(j);
                            //获取到Tab内的各个显示控件
                            // 获取到Tab内的文字控件
                            TextView labelView = (TextView) view.findViewById(com.ashokvarma.bottomnavigation.R.id.fixed_bottom_navigation_title);
                            //计算文字的高度DP值并设置,setTextSize为设置文字正方形的对角线长度,所以:文字高度(总内容高度减去间距和图片高度)*根号2即为对角线长度,此处用DP值,设置该值即可。
                            labelView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, (float) (Math.sqrt(2) * (contentLen - imgLen - space)));
                            //获取到Tab内的图像控件
                            ImageView iconView = (ImageView) view.findViewById(com.ashokvarma.bottomnavigation.R.id.fixed_bottom_navigation_icon);
                            //设置图片参数,其中,MethodUtils.dip2px():换算dp值
                            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams((int) DensityUtil.dip2px(this, imgLen), (int) DensityUtil.dip2px(this, imgLen));
                            params.gravity = Gravity.CENTER;
                            iconView.setLayoutParams(params);
                        }
                    } catch (IllegalAccessException e) {
                        e.printStackTrace();
                    }
                }
            }
        }

    在初始化之后调用即可,第一个参数是间距,同时也会改变文字大小,数字越小,文字越大。第二个是设置图片大小

    bottomNavigationBar.initialise();//初始化
    setBottomNavigationItem(7,21);
    岁月本长而忙者自促;天地本宽而卑者自隘;风花雪月本闲,而劳忧者自冗;天行健,君子以自强不息;地势坤,君子以厚德载物;宠辱不惊,闲看庭前花开花落;去留无意,漫随天外云卷云舒.不妄取,不妄予,不妄想,不妄求,与人方便,随遇而安
  • 相关阅读:
    用 Python 带你看各国 GDP 变迁
    Fluent Interface(流式接口)
    probing privatePath如何作用于ASP.NET MVC View
    Word插入htm文件导致文本域动态增加的一个问题
    Visual Studio 2013附加进程调试IE加载的ActiveX Control无效解决方法
    Ubuntu下Chrome运行Silverlight程序
    Windows Phone Bing lock screen doesn't change解决方法
    SPClaimsUtility.AuthenticateFormsUser的证书验证问题
    Web Service Client使用Microsoft WSE 2.0
    Visual Studio 2013安装Update 3启动crash的解决方法
  • 原文地址:https://www.cnblogs.com/vvning/p/9438701.html
Copyright © 2011-2022 走看看