2015-06-10 13 views
40

Ich verwende neue TabLayout von com.android.support:design Bibliothek. Ich möchte den Hintergrund der ausgewählten/nicht ausgewählten Registerkarten ändern. Ich schaue mir Quellen an und finde nur tabBackground Attribute, die alle Registerkartenfarben ändern und nicht die ausgewählte Registerkartenfarbe steuern.TabLayout Registerkarte Stil

Wie kann ich den ausgewählten/nicht ausgewählten Tab-Hintergrund steuern?

+0

möglich Duplikat [Wie ActionBar, Registerkarte Hintergrund auf ausgewählte Registerkarte Style] (http://stackoverflow.com/questions/13285490/how-to-style-actionbar-tab-background-on -selected-tab) – jlopez

+0

versuchen Sie dies 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 dies Artikel hat schreckliche Code-Paddings und enthält keine Informationen über 'TabLayout', sorry. – IlyaEremin

Antwort

96

definieren:

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

Bewerben:

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

Wo ist so etwas wie ausgewählte Registerkarte Hintergrund? – AnhTriet

+0

@ Forte_201092 in 'TabLayout' ausgewählte Registerkarte wird mit' tabIndicatorColor' angezeigt – Akshay

+0

Also, in 'TabLayout', können wir den ausgewählten Tab Hintergrund nicht ändern? – AnhTriet

7

Ich lese How to Style ActionBar, tab background on selected tab und herauszufinden, was zu tun ist. Es ist wirklich ähnliches Problem, aber ich fand besonders genial Lösung für 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" 
    /> 

beachten Sie, dass layout_height und tabIndicatorHeight die gleiche Höhe haben. So erhalten Sie auf diese Weise eine schöne Übergangsanimation.

+0

Diese Lösung hat einen Fehler - Indikator überlappt Registerkarte Text – IlyaEremin

-9

ich auch dieses Problem erfüllt. Ich suchte nur tabIndicatorColor im gesamten Projekt und fand den folgenden Code in einigen 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 

So ist das Problem gelöst. Möge dies eine Hilfe für dich sein.
das heißt ich IDEA

+9

Warum "Problem ist gelöst"? Wie können wir den ausgewählten Tab-Hintergrund festlegen? – AnhTriet

11

Wenn Sie die TabLayout.class Blick in werden Sie feststellen, innere TabView.class für tatsächliche Layout der Registerkarte. Es ist das gleiche Layout wie jedes andere mit isSelected Attribut. Auswahl der Registerkarte wird auch Auswirkungen auf diese haben so alles, was Sie tun müssen, ist auf Wähler Hintergrund ziehbar wie

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

und hängen Sie es an die tabBackground zum Beispiel Attribut erstellen in XML wie

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