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

来源:互联网 发布:window python编译器 编辑:程序博客网 时间:2024/06/05 04:43

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

阅读全文
0 0
原创粉丝点击