TabLayout使用

第一次寫,如果有錯誤請指正,不太會扯廢話,思路都是按照自己的理解來的,如果有不適,多多包涵!

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"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 寫在前面 更多Material Design 文章請看:Material Design 之 Toolbar 開發(fā)實...
    依然范特稀西閱讀 38,343評論 16 110
  • 通常在ViewPager的上方,我們都會放一個標(biāo)簽指示器與ViewPager進(jìn)行聯(lián)動。以前,我們大多使用的是Git...
    DoAndKeep閱讀 79,660評論 36 110
  • 180928更新關(guān)于指定條的寬度,在support28 / androdix 的版本添加了屬性設(shè)置app:tabI...
    CnPeng閱讀 777評論 0 7
  • 摘要 本文主要記錄TabLayout常常使用到的知識點,避免每次使用TabLayout時,改個小地方,就要花時間去...
    KtYY閱讀 1,239評論 0 1
  • 天兒太熱了,把冰箱冷藏好的葡萄拿出來解渴。開始的幾顆,我習(xí)慣性的剝皮吃掉果仁就丟,可是想起了楊先生給我剝葡萄的場景...
    笑笑1986閱讀 303評論 0 0