【TabLayout】记录关于TabLayout的一些用法
程序员文章站
2023-12-24 19:09:03
...
1.XML文件
<android.support.design.widget.TabLayout
android:id="@+id/tabLayout"
android:layout_width="210dp"
android:layout_height="44dp"
android:background="@color/white"
app:tabBackground="@android:color/transparent"
app:tabGravity="fill"
app:tabIndicatorColor="@color/retech_appyes"
app:tabIndicatorFullWidth="false"
app:tabIndicatorHeight="1.5dp"
app:tabMode="scrollable"
app:tabMaxWidth="0dp"
app:tabRippleColor="@android:color/transparent"
app:tabSelectedTextColor="@color/retech_appyes"
app:tabTextAppearance="@style/retech_tabLayout_textSize"
app:tabTextColor="@color/retech_appnot" />
- 1.适配Paid,标签平分问题 app:tabMaxWidth="0dp"
- 2.取消点击阴影效果
app:tabRippleColor="@android:color/transparent"
或者TabLayout.setTabRippleColor(null);
即可取消点击阴影效果 - 3.指示器长度是否跟字体宽度一样长 app:tabIndicatorFullWidth="false"
- 4.设置文字大小 app:tabTextAppearance="@style/retech_tabLayout_textSize"
2.Styles文件
<!-- TabLayout 字体大小 -->
<style name="retech_tabLayout_textSize">
<item name="android:textSize">15sp</item>
</style>
3.自定义指示器长度
public static void reflex(final TabLayout tabLayout){
//了解源码得知 线的宽度是根据 tabView的宽度来设置的
tabLayout.post(new Runnable() {
@Override
public void run() {
try {
//拿到tabLayout的mTabStrip属性
LinearLayout mTabStrip = (LinearLayout) tabLayout.getChildAt(0);
int dp30 = DpUtils.dip2px(tabLayout.getContext(), 30);
for (int i = 0; i < mTabStrip.getChildCount(); i++) {
View tabView = mTabStrip.getChildAt(i);
//拿到tabView的mTextView属性 tab的字数不固定一定用反射取mTextView
Field mTextViewField = tabView.getClass().getDeclaredField("mTextView");
mTextViewField.setAccessible(true);
TextView mTextView = (TextView) mTextViewField.get(tabView);
tabView.setPadding(0, 0, 0, 0);
//因为我想要的效果是 字多宽线就多宽,所以测量mTextView的宽度
int width = 0;
width = mTextView.getWidth();
if (width == 0) {
mTextView.measure(0, 0);
width = mTextView.getMeasuredWidth();
}
//设置tab左右间距为10dp 注意这里不能使用Padding 因为源码中线的宽度是根据 tabView的宽度来设置的
LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) tabView.getLayoutParams();
params.width = width ;
params.leftMargin = dp30;
params.rightMargin = dp30;
tabView.setLayoutParams(params);
tabView.invalidate();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
});
}