Android TabLayout切换时,改变选中状态下字体大小颜色
程序员文章站
2022-06-01 09:17:12
...
需求:TabLayout和ViewPager实现左右切换联动,选中状态下字体变大,黑色 非选中状态下小字
先看一段腾讯视频效果图:
思路:
TabLayout没有什么属性可供满足需求,所以只能想办法给选中tab定制TextView,再根据监听TabLayout的选中状态设置该TextView的显示样式。
1.注解 BindView
@BindView(R.id.toolbar_tab)
TabLayout toolbarTab;
@BindView(R.id.view_pager)
ViewPager viewPager;
2. TabLayout + viewPager
if(!isAdded()){
return;
}
adapter = new TabPagerAdapter(getChildFragmentManager(),tabList); //tabList,自己的数据
viewPager.setAdapter(adapter);
viewPager.setCurrentItem(1);
viewPager.setOffscreenPageLimit(3);
toolbarTab.setupWithViewPager(viewPager);
for (int i = 0; i < toolbarTab.getTabCount(); i++) {
TabLayout.Tab tab = toolbarTab.getTabAt(i);
if (tab != null) {
tab.setCustomView(getTabView(i));
}
}
toolbarTab.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab) {
//在这里可以设置选中状态下 tab字体显示样式
viewPager.setCurrentItem(tab.getPosition());
View view = tab.getCustomView();
if (null != view && view instanceof TextView) {
((TextView) view).setTextSize(19);
((TextView) view).setTextColor(ContextCompat.getColor(mContext, R.color.home_tab_selected));
}
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
View view = tab.getCustomView();
if (null != view && view instanceof TextView) {
((TextView) view).setTextSize(14);
((TextView) view).setTextColor(ContextCompat.getColor(mContext, R.color.home_tab_noselected));
}
}
@Override
public void onTabReselected(TabLayout.Tab tab) {
}
});
/**
* 自定义Tab的View
* @param currentPosition
* @return
*/
private View getTabView(int currentPosition) {
View view = LayoutInflater.from(mContext).inflate(R.layout.layout_tab, null);
TextView textView = (TextView) view.findViewById(R.id.tab_item_textview);
textView.setText(categoryList.get(currentPosition).getName());
return view;
}
layout_tab.xml文件也很简单 只有一个textView
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tab_item_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
android:typeface="sans"
>
</TextView>
代码不多,主要是实现思路,想好怎么做了 实现起来还是蛮简单的。大家要是有更好的方法可以多给一些jian
上一篇: Express学习笔记
下一篇: express 注意事项