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<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>新闻热点
疑难解答