2015-06-10 173 views
40

我使用com.android.support:design庫中的新TabLayout。我想更改選定/未選中選項卡的背景。 我看源代碼,發現只有tabBackground屬性,改變所有標籤的顏色,並不控制選定的標籤顏色。TabLayout標籤樣式

如何控制選定/未選中的選項卡背景?

+0

的重複可能[如何風格ActionBar中,所選的選項卡標籤背景](http://stackoverflow.com/questions/13285490/how-to-style-actionbar-tab-background-on -selected-tab) – jlopez

+0

試試這個https://abhishekdabral.wordpress.com/2015/04/03/bottom-tabs-with-fragment-state-pager-adapter/?preview=true&preview_id=25&preview_nonce=49237562f9 – Abhishek

+0

@Doraemon this文章有可怕的代碼填充,並且不包含關於'TabLayout'的信息,對不起。 – IlyaEremin

回答

96

定義:

<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> 

應用:

<android.support.design.widget.TabLayout 
    style="@style/AppTabLayout" 
    app:tabTextAppearance="@style/AppTabTextAppearance" 
    android:layout_width="match_parent" 
    .... /> 
+1

哪裏有被稱爲選定標籤背景的東西? – AnhTriet

+0

@Flae_201092在'TabLayout'選定的選項卡用'tabIndicatorColor'指示 – Akshay

+0

因此,在'TabLayout'中,我們無法更改選定的選項卡背景? – AnhTriet

7

我讀How to Style ActionBar, tab background on selected tab並找出該怎麼做。這實在是類似的問題,但是我發現真棒解決方案專爲TabLayout

<android.support.design.widget.TabLayout 
    android:id="@+id/tabs" 
    android:layout_width="match_parent" 
    android:layout_height="48dp" 
    android:background="@color/tab_layout_color" 
    app:tabIndicatorHeight="48dp" 
    app:tabIndicatorColor="@color/selected_tab_color" 
    /> 

注意layout_heighttabIndicatorHeight具有相同的高度。所以你用這種方式獲得漂亮的過渡動畫。

+0

這個解決方案有一個錯誤 - 指標覆蓋標籤文本 – IlyaEremin

-9

我也遇到了這個問題。我只是在整個項目搜索tabIndicatorColor,發現一些R.java下面的代碼:

 @see #TabLayout_tabBackground 
     @see #TabLayout_tabContentStart 
     @see #TabLayout_tabGravity 
     @see #TabLayout_tabIndicatorColor 
     @see #TabLayout_tabIndicatorHeight 
     @see #TabLayout_tabMaxWidth 
     @see #TabLayout_tabMinWidth 
     @see #TabLayout_tabMode 
     @see #TabLayout_tabPadding 
     @see #TabLayout_tabPaddingBottom 
     @see #TabLayout_tabPaddingEnd 
     @see #TabLayout_tabPaddingStart 
     @see #TabLayout_tabPaddingTop 
     @see #TabLayout_tabSelectedTextColor 
     @see #TabLayout_tabTextAppearance 
     @see #TabLayout_tabTextColor 

所以,問題就解決了。願這對你有所幫助。
即我用IDEA

+9

爲什麼「問題解決了」?由此,我們如何設置選定的標籤背景? – AnhTriet

11

如果你看看TabLayout.class你會發現對標籤的實際佈局內TabView.class。它與isSelected屬性的佈局相同。選擇標籤也會對這種影響,因此所有你需要做的是創造選擇背景繪製像

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:state_selected="true" android:drawable="@color/tab_bg_selected"/> 
<item android:drawable="@color/tab_bg_unselected"/></selector> 

並將其連接到tabBackground屬性如在XML像

<android.support.design.widget.TabLayout 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabBackground="@drawable/tab_bg" 
      app:tabIndicatorHeight="4dp"/>