TabLayout 使用入门
介绍
TabLayout是Google官方设计的一个分类UI,效果类似如下:
通常,我们会和ViewPager一起配合使用,实现滑动ViewPager,上面的分类也会跟着切换的效果。
ViewPager设置
使用ViewPager之前,需要设置Adapter,推荐使用FragmentStatePagerAdapter
或者FragmentPagerAdapter
。TabLayout会根据ViewPager的页数显示Tab,默认的Tab是一个文本view,里面的文字需要通过实现Adapter的getPageTitle(int position)
方法来自动生成。 TabLayout绑定ViewPager,只需要调用一个方法即可:
mTabLayout.setupWithViewPager(mViewPager);
TabLayout 文本颜色
设置TabLayout的文本的颜色十分简单,有两种方式,一个是xml文件的形式,另一个是java代码的形式。 - xml方法:
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="44dp"
app:tabSelectedTextColor="@color/ls_color_red"
app:tabTextColor="@color/ls_color_blue">
java代码形式:
mTabLayout.setTabTextColors(int normalColor, int selectedColor);
Tablayout 文字大小
如果是要设置统一的文本大小,也很简单,只需要在values\style
里面添加一个风格代码就可以:
<style name="MyTabLayoutTextStyle" parent="TextAppearance.AppCompat.Title">
<item name="android:textSize">@字体大小</item>
</style>
然后布局文件里面设置tabTextAppearance
参数
<android.support.design.widget.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="44dp"
app:tabTextAppearance="@style/OrderTabLayoutTextStyle">
但是,如果你想要动态改变文字的大小,例如选中的文字比未选中的大 ,那就不能用这个方法了。
TabLayout 动态改变文字的大小
由于TabLayout官方没有设置文本大小的方法,所以,我们只能寻找其他的办法,所以我们可以使用自定义View的形式;TabLayout.Tab
有一个方法叫setCustomView(@Nullable View view)
,通过customView,我们就可以实现对文本大小的控制了。 通过遍历TabLayout的tabs,然后添加自定义的view:
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
TabLayout.Tab tab = mTabLayout.getTabAt(i);
TextView tv = new TextView(getContext());
LinearLayout.LayoutParams p = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
tv.setLayoutParams(p);
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
tv.setText(tab.getText());
tab.setCustomView(tv);
}
监听tab的切换,然后当tab被选中就把文字大小改变:
mTabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
if(tab.getCustomView() == null){
return;
}
//todo-*******对文本大小进行修改*******
}
}
改变横线的长度和高度
高度 控制横线的高度可以在xml文件里面写上
tabIndicatorHeight
参数。长度 虽然不能直接通过TabLayout的方法对长度进行控制,但是查看源码知道,横线的长度和tab的宽度有关,可以通过反射得到tabview然后设置长度:
try {
LinearLayout mTabStrip = (LinearLayout) mTabLayout.getChildAt(0); int dp10 = DeviceUtils.dp2px(10); for (int i = 0; i < mTabStrip.getChildCount(); i++) { View tabView = mTabStrip.getChildAt(i); tabView.setPadding(0, 0, 0, 0); //设置tab左右间距为10dp 注意这里不能使用Padding 因为源码中线的宽度是根据 tabView的宽度来设置的 LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams(); params.width = DeviceUtils.dp2px(42); params.leftMargin = dp10; params.rightMargin = dp10; tabView.setLayoutParams(params); tabView.invalidate(); }
} catch (Exception e) {
e.printStackTrace();
}