2014-04-04 25 views
7

Ich habe eine TabWidget, unabhängig von der ÀctionBar , in a FragmentTabHost`.Ändern Sie Textfarbe und Selektor in TabWidget

Ich möchte das Aussehen und Gefühl der TabWidget anpassen, aber ich verstehe es nicht. Meine Absicht ist, die Textfarbe und die Auswahlfarbe zu ändern, wie Sie im Bild sehen können, kann ich den Hintergrund der TabWidget ändern. Ich möchte keine benutzerdefinierte TextView für die Tabs verwenden, da die Tabs mit dem Holo-Look & Feel übereinstimmen müssen.

TabWidget

Ich habe versucht, einen Stil der TabWidget zu setzen, aber es funktioniert nicht. Auf diese Weise:

<TabWidget 
      android:id="@android:id/tabs" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="horizontal" 
      style="@style/MyTabs" 
      /> 

und mit dem Stil

<style name="MyTabs"> 
     <item name="android:textColor">@color/white</item> 
     <item name="android:background">@drawable/tabs</item> 
     <item name="android:backgroundStacked">@color/red_action_bar</item> 
    </style> 

Ich habe versucht, den Stil von einem theme.xml mit den parent="android:Widget.Holo.TabWidget", aber es passiert nichts hinzuzufügen.

+0

https://developer.android.com/traini ng/basics/actionbar/styling.html – Raghunandan

+0

Danke, aber wie gesagt. Diese Registerkarten sind unabhängig von der ActionBar. Bitte lesen Sie die Frage sorgfältig durch. @ Raghunandan – Mun0n

+0

gibt es ein Thema Cutomizing Registerkarte Indikatoren, so dass, warum ich diesen Link veröffentlicht. Irgendwie viel Glück – Raghunandan

Antwort

7

Ich finde endlich einen Weg, das zu tun. Mit diesem Code in der onCreateView Methode der Fragment

for (int i = 0; i < tabHost.getTabWidget().getChildCount(); i++) { 
       View v = tabHost.getTabWidget().getChildAt(i); 
       v.setBackgroundResource(R.drawable.tabs); 

       TextView tv = (TextView) tabHost.getTabWidget().getChildAt(i).findViewById(android.R.id.title); 
       tv.setTextColor(getResources().getColor(R.color.white)); 
} 

und Einstellung der bakcground Farbe der TabWidget zu rot

0

Ich habe nicht die Tabs sich geändert, aber ich würde davon ausgehen, dass Sie es mit diesen Arten von styles.xml zu tun ...

<style name="Widget.Holo.TabWidget" parent="Widget.TabWidget"> 
     <item name="android:tabStripLeft">@null</item> 
     <item name="android:tabStripRight">@null</item> 
     <item name="android:tabStripEnabled">false</item> 
     <item name="android:divider">?android:attr/dividerVertical</item> 
     <item name="android:showDividers">middle</item> 
     <item name="android:dividerPadding">8dip</item> 
     <item name="android:measureWithLargestChild">true</item> 
     <item name="android:tabLayout">@android:layout/tab_indicator_holo</item> 
    </style> 

mit tab_indicator_holo.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
     <!-- Non focused states --> 
     <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_holo" /> 
     <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_holo" /> 

     <!-- Focused states --> 
     <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/tab_unselected_focused_holo" /> 
     <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@drawable/tab_selected_focused_holo" /> 

     <!-- Pressed --> 
     <!-- Non focused states --> 
     <item android:state_focused="false" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_holo" /> 
     <item android:state_focused="false" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_holo" /> 

     <!-- Focused states --> 
     <item android:state_focused="true" android:state_selected="false" android:state_pressed="true" android:drawable="@drawable/tab_unselected_pressed_focused_holo" /> 
     <item android:state_focused="true" android:state_selected="true" android:state_pressed="true" android:drawable="@drawable/tab_selected_pressed_focused_holo" /> 
    </selector> 

Or Sie können auch

<style name="Widget.Holo.ActionBar.TabView" parent="Widget.ActionBar.TabView"> 
      <item name="android:background">@drawable/tab_indicator_ab_holo</item> 
      <item name="android:paddingLeft">16dip</item> 
      <item name="android:paddingRight">16dip</item> 
     </style> 

und tab_indicator_ab_holo.xml

versuchen

Schließlich die zwei png-9 Zeichen verwenden: tab_selected_holo und tab_unselected_holo. Sie sehen aus wie die zwei dickeren und dünneren blauen Linien, von denen du sprichst.

Oder meinst du die Minitabs?

<style name="Widget.ActionBar.TabView" parent="Widget"> 
     <item name="android:gravity">center_horizontal</item> 
     <item name="android:background">@drawable/minitab_lt</item> 
     <item name="android:paddingLeft">4dip</item> 
     <item name="android:paddingRight">4dip</item> 
    </style> 

mit in minitab_lt.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_pressed="true" android:state_selected="true" 
      android:drawable="@drawable/minitab_lt_press" /> 
    <item android:state_selected="true" 
      android:drawable="@drawable/minitab_lt_selected" /> 
    <item android:state_pressed="true" 
      android:drawable="@drawable/minitab_lt_unselected_press" /> 
    <item android:drawable="@drawable/minitab_lt_unselected" /> 
</selector> 

Wenn Sie eine andere Definition nur für TabWidget suchen hier: https://github.com/android/platform_frameworks_base/blob/master/core/res/res/values/styles.xml

Dann wie gewohnt Ihren eigenen Stil mit allen erforderlichen Attributen und Drawables definieren ...

+0

Ja, es gibt mir nicht das Ergebnis, das ich gesucht habe .... danke – Mun0n

-2

Wie ich here beantwortet, kann dies tatsächlich getan wird XML-Themen verwenden. Die TabWidget verwendet android:textPrimaryColor für die ausgewählte Registerkarte und android:textSecondaryColor für die nicht ausgewählten.Die Akzentfarbe wird durch colorAccent und die Hintergrundfarbe So durch colorPrimary bestimmt, können Sie die gewünschte Anpassung wie folgt erreichen:

In styles.xml:

<style name="TabWidgetTheme" parent="AppTheme"> 
    <item name="colorPrimary">@color/your_primary_color</item> 
    <item name="colorAccent">@color/your_accent_color</item> 
    <item name="android:textPrimaryColor">@color/your_primary_color</item> 
    <item name="android:textSecondaryColor">@color/your_secondary_color</item> 
</style> 

In Ihrem Layout:

<TabHost 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:theme="@style/TabWidgetTheme"/> 

Beachten Sie, dass die android:theme nicht direkt in der TabWidget selbst sein sollte, sondern eher die TabHost oder ähnliche enthält.

+1

Einfache und falsche Lösung. 'android: textPrimaryColor' und' android: textSecondaryColor' existieren nicht, die Farbe der Tabs ändert sich nicht. – CoolMind

+0

@CoolMind wissen Sie zufällig, welche Eigenschaften existieren? – mpilliador

+0

@mpilliador, tut mir leid, ich habe keinen Zugang zu diesem Projekt. Eine Top-Antwort hat mir auch geholfen. Soweit ich mich erinnere, gibt es eine XML in res/Layout, die eine Registerkarte Header beschreibt. Es kann mit TabWidget verbunden werden. – CoolMind

0

Versuchen Sie folgendes:

1.Erstellen einen neuen Stil:

<style name="TabText"> 
    <item name="android:textColor">@color/YOUR_COLOR</item> 
</style> 

2.On Tab Host gesetzt Thema:

<TabHost android:theme="@style/TabText"> 

3.Die Hintergrund Sie können in der Regel am Set TabWidget

<TabWidget android:background="#FFF"/>