第一次寫,如果有錯誤請指正,不太會扯廢話,思路都是按照自己的理解來的,如果有不適,多多包涵!
TabLayout 是com.android.support:design:25.3.1包下的控件,主要作用是作為ViewPager的指示器
一.使用
1、在build.gradle文件中加入compile 'com.android.support:design:25.3.1'
2、在布局文件中引用android.support.design.widget.TabLayout
3、在代碼中和ViewPager關(guān)聯(lián)tabLayout.setupWithViewPager(ViewPager)
4.重寫ViewPager的Adapter 中的getPageTitle方法返回對應(yīng)的title
二、常用屬性和方法
app:tabIndicatorColor="@color/_FF3E30"指示器下標(biāo)的顏色
app:tabSelectedTextColor="@color/_FF3E30"選中字體的顏色
app:tabTextColor="@color/_5F5F5F"默認(rèn)字體的顏色
app:tabIndicatorHeight="2dp"指示器的高度
app:tabTextAppearance="@style/Tablayout_Title_Style"字體的樣式 可以設(shè)置字體大小 格式
<style name="Tablayout_Title_Style">
? <item name="android:textSize">12sp</item>
<item name="android:textColor">@color/_8F8D88</item>
</style>
app:tabBackground="@android:color/white"背景顏色
app:tabMode="fixed"標(biāo)題顯示模式 fixed 固定的,不能超出屏幕scrollable不固定的,可以超出屏幕
app:tabContentStart="120dp"整個指示器居父控件左邊的距離
app:tabMinWidth? tabMaxWidth每個Item的最小寬度 最大寬度
app:tabPadding/Top/Buttom/Start/End 設(shè)置對應(yīng)的padding
app:tabGravity內(nèi)容顯示模式 fill 充滿center局中 現(xiàn)在暫時沒有發(fā)現(xiàn)作用
三.設(shè)置下劃線的長度
由于在源碼中對tabLayout的下劃線進(jìn)行了設(shè)置.并沒有方法可以直接設(shè)置,可以使用反射的機制來實現(xiàn)這是參考
public void setIndicator (TabLayout tabs,int leftDip,int rightDip){? ?
ClasstabLayout = tabs.getClass();? ?
Field tabStrip = null;? ?
try {?
? ?tabStrip = tabLayout.getDeclaredField("mTabStrip");? ?
} catch (NoSuchFieldException e) {? ?
e.printStackTrace();? ?
}? ? ?
tabStrip.setAccessible(true);? ?
LinearLayout llTab = null;? ?
try {? ?
llTab = (LinearLayout) tabStrip.get(tabs);?
? } catch (IllegalAccessException e) {? ?
e.printStackTrace();?
? }? ? ?
int left = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, leftDip, Resources.getSystem().getDisplayMetrics());?
int right = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, rightDip, Resources.getSystem().getDisplayMetrics());? ? ?
for (int i = 0; i < llTab.getChildCount(); i++) {? ?
View child = llTab.getChildAt(i);? ?
child.setPadding(0, 0, 0, 0);? ?
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(0, LinearLayout.LayoutParams.MATCH_PARENT, 1);
? params.leftMargin = left; ??
params.rightMargin = right;? ?
child.setLayoutParams(params);?
? child.invalidate();? ? ? ?
}
特別說明:如果出現(xiàn)以下崩潰
Caused by: java.lang.IllegalArgumentException: You need to use a Theme.AppCompat theme (or descendant) with the design library.
在清單文件中設(shè)置如下代碼即可:
android:theme="@style/Theme.AppCompat"