tabIndicatorHeight 設(shè)置width(默認(rèn)只能設(shè)置height)
通過反射來設(shè)置width,代碼如下
實(shí)現(xiàn)如下:(為了支持單個(gè)item樣式改變汤善,所以設(shè)置了一個(gè)匿名函數(shù)回調(diào))
/***
* 通過反射更改tablayout的線寬度
* */
public interface IndicatorWidthClick{
// 回調(diào)設(shè)置 item
void setUpChildren(int position,LinearLayout.LayoutParams params,View child);
}
public static void setUpIndicatorWidth(TabLayout tabLayout, IndicatorWidthClick click) {
Class<?> tabLayoutClass = tabLayout.getClass();
Field tabStrip = null;
try {
tabStrip = tabLayoutClass.getDeclaredField("mTabStrip");
tabStrip.setAccessible(true);
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
LinearLayout layout = null;
try {
if (tabStrip != null) {
layout = (LinearLayout) tabStrip.get(tabLayout);
}
for (int i = 0; i < layout.getChildCount(); i++) {
View child = layout.getChildAt(i);
child.setPadding(0, 0, 0, 0);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1);
click.setUpChildren(i,params,child);
child.setLayoutParams(params);
child.invalidate();
}
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
使用如下:(ReflectionHelper是我寫的反射的幫助類,放置反射相關(guān))
final int leftPading = dp2px(this, 30);
final int rightPading = dp2px(this, 40);
ReflectionHelper.setUpIndicatorWidth(segeView, new ReflectionHelper.IndicatorWidthClick() {
@Override
public void setUpChildren(int position, LinearLayout.LayoutParams params, View child) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
if (position == 0){
params.setMarginStart(leftPading);
params.setMarginEnd(rightPading);
}else {
params.setMarginStart(rightPading);
params.setMarginEnd(leftPading);
}
}
}
});
TabLayout與viewpage綁定使用
segeView.setupWithViewPager(hScrollerView);
TabLayout title的獲取(viewpage的getPageTitle)
//
@Override
public CharSequence getPageTitle(int position) {
// 此方法返回
}
更改TabLayout的樣式(標(biāo)示線的顏色,標(biāo)題的顏色大小,TabLayout的背景顏色)
<android.support.design.widget.TabLayout
style="@style/AppTabLayout"
app:tabTextAppearance="@style/AppTabTextAppearance"
android:layout_width="match_parent"
.... />
<style name="AppTabLayout" parent="Widget.Design.TabLayout">
<item name="tabMaxWidth">@dimen/tab_max_width</item>
<item name="tabIndicatorColor">?attr/colorAccent</item>
<item name="tabIndicatorHeight">4dp</item>
<item name="tabPaddingStart">6dp</item>
<item name="tabPaddingEnd">6dp</item>
<item name="tabBackground">?attr/selectableItemBackground</item>
<item name="tabTextAppearance">@style/AppTabTextAppearance</item>
<item name="tabSelectedTextColor">@color/range</item>
</style>
<!-- for text -->
<style name="AppTabTextAppearance" parent="TextAppearance.Design.Tab">
<item name="android:textSize">12sp</item>
<item name="android:textColor">@color/orange</item>
<item name="textAllCaps">false</item>
</style>