TabLayout自己踩过的一些坑

TabLayout十分强大,特别是处理顶部导航的时候,几行代码就可以达到一个非常不错的效果,配置也相对简单,具体使用,此处不多讲,说说它与ViewPager联动的一些坑

1、TabLayout有直接关联 ViewPager的方法 setupWithViewPager(),使用这个方法,必须要在ViewPager设置适配器之后。
2、添加tab 使用这个方法 mTabLayout.addTab(mTabLayout.newTab()); 会出现tab不显示的情况。主要是适配器没重写 getPageTitle();方法否则不显示。 setupWithViewPager 会清除好多东西 追踪下代码,会移除许多ViewPager的监听,反正这个方法,也算是让人爱恨交加的方法了。
3、如果是做底部导航,那么关于设置icon的问题,我用了 icon会缩小,而且文字与icon的距离不可控。所以做底部导航就需要用到自己的View了,用来的十分不好用,扩展性不强,好在TabLayout给出了拓展View的标签,下面贴下代码当然 对应的ImageView的Drawable资源 就是一个selector 只不过里面的状态要判断的是status_selector
还有TextView的颜色选择器也要自己定义 ,我随便发一个我写的吧,大家参考就行

        ViewGroup tabParent;//根布局
        ImageView tabImg;//图片文件
        TextView tabText;//文本
        for (int i=0 ,length=names.length;i
            TabLayout.Tab tab=mTabLayout.newTab();
            tabParent= (ViewGroup) getLayoutInflater().inflate(R.layout.custom_tab_item,null,false);
            tab.setCustomView(tabParent);
            //作者自己的布局这么get没毛病,还是推荐写id 通过findViewById获取控件
            tabImg= (ImageView) tabParent.getChildAt(0);
            tabText= (TextView) tabParent.getChildAt(1);

            tabImg.setImageResource(icons[i]);
            tabText.setText(names[i]);
            mTabLayout.addTab(tab);
        }

这样写扩展性非常强。不过这种写法需要手动实现一些监听,TabLayout也给我们做好了

mViewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(mTabLayout));
mTabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(mViewPager));

各种选择器实例:

图片选择器

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/student_mine_true" android:state_selected="true"/>
    <item android:drawable="@drawable/student_mine_false"/>
selector>

颜色选择器:

<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_selected="true" android:color="@color/main_color">item>
    <item android:state_selected="false" android:color="@color/main_grey">item>
selector>

你可能感兴趣的:(Android,TabLayout)