关于选项卡三方库FlycoTabLayout的使用及修改
theme: channing-cyan
小知识,大挑战!本文正在参与「程序员必备小知识」创作活动
本文已参与 「掘力星计划」 ,赢取创作大礼包,挑战创作激励金。
前言
上篇文章属实丢人,因为英文的不了解导致最后白白浪费一堆时间,不然我早就摸一天鱼了,经过几小时的深思熟虑我打算挽回我的颜面,来介绍我好久以前就在用的选项卡库-FlycoTabLayout
简单使用
Xml
```
<com.flyco.tablayout.SlidingTabLayout
android:layout_width="match_parent"
android:layout_height="50dp"
app:tl_indicator_color="@color/teal_200"
app:tl_indicator_height="10dp"
app:tl_indicator_corner_radius="8dp"
app:tl_tab_space_equal="true"
android:id="@+id/flyco"
app:tl_textSelectColor="#E91E63"
app:layout_constraintTop_toTopOf="parent"
app:tl_textUnselectColor="@color/black"/>
<androidx.viewpager.widget.ViewPager
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@+id/vp"
app:layout_constraintTop_toBottomOf="@id/flyco"
app:layout_constraintBottom_toBottomOf="parent"/>
```
Activity
``` public class FlycoActivity extends AppCompatActivity {
private SlidingTabLayout mFlyco;
private ViewPager mVp;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_flyco);
initView();
}
private void initView() {
mFlyco = findViewById(R.id.flyco);
mVp = findViewById(R.id.vp);
String[] titles = new String[5];
ArrayList<Fragment> fragments = new ArrayList<>();
for (int i = 0; i < 5; i++) {
titles[i] = ("标题" + i);
fragments.add(new FlycoFragment());
}
mFlyco.setViewPager(mVp, titles, this, fragments);
}
} ```
完事,看效果
哇,哇哇,哇哇哇!!! 太特么丑了!这是我xml中属性设置问题,不在意细节的话Activity代码非常少,简直是懒人必备,外包必备啊.仅需要一个viewpager,标题,上下文,fragment,直接满足项目中常见的页面,心动不如行动快来使用吧!
咳咳,扯远了,一般来说项目中都有这种页面,而且要求滑到相应选项卡,就要给设置加粗,虽然库的作者开放了这个设置的api,但是设置了只有滑动一下才会开始加粗,而且最后一次更新是2016年,属实拉胯嗷,我们要么在监听里面操作,要么深入源码来操作了,今天咱们接着深入源码,gogogo!
操作
首先啊我们分析一下这个玩意,我估计封装的LinearLayout,然后噼里啪啦给我们封装了设置Viewpager的一系列操作.首先就是要看SetAdapter这个方法,我们先进去找找吧.
好家伙,一上来就找到了关键的地方,这个库开放了设置选中字体颜色和非选中字体颜色,咱们瞅瞅在哪弄得,然后加粗也跟人家在相同的地方操作.
我来跟大家讲讲我是怎么快速找到相应属性的
首先进入xml,然后按住你的ctrl单击鼠标左键,就会进入value.xml,里面都是这个库的一些属性,然后复制我们单击的属性 tl_textSelectColor 进入 SlidingTabLayout 搜索一下
看这命名,多么的令人愉快,如果于勒叔叔...
好了找到目的代码直接搬过来开始改造吧
库的作者自己定义了一个方法 notifyDataSetChanged 里面主要是更新数据,更新文本状态,将Tab添加到LinearLayout中,为啥是Linearlyaout因为他上面的Tab就是封装的LienarLayout
``` private void updateTabStyles() { for (int i = 0; i < mTabCount; i++) { View v = mTabsContainer.getChildAt(i); // v.setPadding((int) mTabPadding, v.getPaddingTop(), (int) mTabPadding, v.getPaddingBottom()); TextView tv_tab_title = (TextView) v.findViewById(com.flyco.tablayout.R.id.tv_tab_title); if (tv_tab_title != null) { tv_tab_title.setTextColor(i == mCurrentTab ? mTextSelectColor : mTextUnselectColor); tv_tab_title.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextsize); tv_tab_title.setPadding((int) mTabPadding, 0, (int) mTabPadding, 0); if (mTextAllCaps) { tv_tab_title.setText(tv_tab_title.getText().toString().toUpperCase()); }
if (mTextBold == TEXT_BOLD_BOTH) {
tv_tab_title.getPaint().setFakeBoldText(true);
} else if (mTextBold == TEXT_BOLD_NONE) {
tv_tab_title.getPaint().setFakeBoldText(false);
}else{
tv_tab_title.getPaint().setFakeBoldText(mCurrentTab==i);
}
}
}
}
```
然后还有第二种方法,一上来第一个不加粗是因为ViewPager监听没有走Select这个回调,我们手动调用下就好了
mFlyco.onPageSelected(0);
在Activity添加这一行,手动给OnPageSelected设置一个回调都可以实现上面所说的第一个不加粗问题.
哈哈哈哈哈.我不愧是个大水b.虽然我们浪费一堆精力来修改源码但是我们收获了很多啊,以前我看源码的时候才知道原来setFakeBoldText也能给字体加粗啊,而且没那么突兀,显得很自然.我们也不是毫无收获,不是嘛.
好了,今天就到这了,拜拜┏(^0^)┛
差点忘了效果图
- 学习Android的第十七天
- 这是一个吸猫文章的标题,甚至可以有两行这么多哦
- 学习Android的第四天
- 学习Android的第一天
- 含有边框的TextView-Android
- 电池-Android
- 倒计时封装-Android
- 标题和状态栏滑动渐变(2)-Android
- 标题和状态栏滑动渐变(1)-Android
- 关于选项卡三方库FlycoTabLayout的使用及修改
- 关于第三方库SmartTabLayout的一点小修改
- 关于递归反转链表的思路
- 搜索历史记录的实现-Android
- 感觉让人耳目一新的动画库Lottie
- Android-关于设备唯一ID的奇技淫巧
- 稍微巧妙的双模块联动-ViewPager
- 动画库NineOldAndroids实战自定义悬浮窗
- 关于项目中圆角及特殊圆角的实际使用问题
- 自定义TextView可控制Drawable大小