android Viewpager+TabLayout+Fragment遇到的问题记录

1.使用官方的TabLayout的时候遇到了一些问题,现在记录一下.

问题一: 底部下划线的宽度修改,官方是没有这个方法可以修改下划线的宽度的,只能使用反射来解决这个问题了.

解决方案如下,调用此方法,(此方法,是copy自他人,非原创)

 //space:间距,imgLen:图片大小

 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) UiUtils.dp2px(this, imgLen), (int) UiUtils.dp2px(this, imgLen));
                        params.gravity = Gravity.CENTER;
                        iconView.setLayoutParams(params);
                    }
                } catch (IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
    }

问题二:添加的fragment,切换之后view丢失了,不现实,其实这个问题是viewpager的问题

. 默认情况下,ViewPager会根据setOffscreenPageLimit()方法设置的大小, 自动预加载
滑动fragment1,此时会预加载fragment2,滑动到fragment2会预加载fragment3,但是滑动到fragment3,此时会调用fragment1的destroyview方法,销毁视图。当重新滑动到fragment1才会重新调用fragment1的oncreateview方法。注意此时并不会销毁实例,不会调用ondestroy方法
假若fragment比较少那么可以在适配器中重写
destroyItem方法即可,让此方法为空,那么fragment的view就不会被销毁了.前提是你的fragment比较少;
另外可以使用懒加载,当界面可见的时候在去加载数据.
问题三: 虽然设置了模式是标签多了可以滑动,但是发现标签多了之后即便是两个字也会上下显示而不是正常的左右显示.
解决办法:设置了tablayout的属性maxwidth,另外设置了字体的大小.
其他,若不想展示下划线,可以设置下划线高度为0 ;
其他一些属性的介绍
app:tabIndicatorColor="@color/csc_orange"  选中之后的下划线颜色
app:tabIndicatorHeight="0dp"  下划线设置高度为0可以不显示下划线
app:tabMaxWidth="@dimen/csc_dp_50"
app:tabTextAppearance="@style/TabLayoutTextStyle" 设置标签字体大小,在style下写即可,
<style name="TabLayoutTextStyle">
    <item name="android:textSize">@dimen/csc_sp_15</item>
</style>
 app:tabSelectedTextColor="@color/csc_orange" 选中之后的标签字体颜色app:tabTextColor="@color/top_category_scroll_text_color_day" 未选中的标签字体颜色
若有问题,请联系我,谢谢.qq:824527502

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xvzhengyang

感谢,励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值