2010-05-10 9 views

risposta

24

Style si nella vostra abitudine cambiamento tema

<item name="android:tabWidgetStyle">@android:style/Widget.TabWidget</item> 

e

<style name="Widget.TabWidget"> 
     <item name="android:textAppearance">@style/TextAppearance.Widget.TabWidget</item> 
     <item name="android:ellipsize">marquee</item> 
     <item name="android:singleLine">true</item> 
</style> 


<style name="TextAppearance.Widget.TabWidget"> 
    <item name="android:textSize">14sp</item> 
    <item name="android:textStyle">normal</item> 
    <item name="android:textColor">@android:color/tab_indicator_text</item> 
</style>  
+0

ottenuto. attraverso questo link: http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=6b3d7407d1c895a3c297e60d5beac98e2d34c271;hb = HEAD e riferisci gli APIDemos. Grazie . – Praveen

+3

@DroidBase, @Alex Volovoy, dove devo posizionare gli stili. Quando ho messo in un file XML separato nella cartella valori, ha ottenuto l'errore 'Errore nel recupero genitore per la voce: No risorsa trovato che corrisponde al nome dato 'Widget'.' –

+0

@Mithun: Si prega di inviare qualche frammento di codice trovare la soluzione esatta. La mia ipotesi è che tu non abbia menzionato l'attributo genitore. cioè ignorare lo stile di default di un oggetto XML – Praveen

29

Ecco una nuova risposta che ho trovato da Fred Grott (http://knol.google.com/k/fred-grott/advance-tabs/), dopo un po 'di ricerca web.
Ciò consente di impostare uno selector per il colore del testo in modo che sia possibile utilizzare un colore diverso quando la scheda è selezionata o meno. Che può essere molto utile se si utilizza un colore di sfondo diverso per la scheda se è selezionata. Naturalmente puoi anche semplicemente inserire un colore normale e non un selettore.

final TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title);   
tv.setTextColor(this.getResources().getColorStateList(R.color.text_tab_indicator)); 

Dove R.color.text_tab_indicator è un selector xml file si trova nella cartella res/drawable.

In altre parole, il testo dell'indicatore è in realtà un TextView che è recuperabile tramite l'oggetto View a cui è possibile accedere dall'oggetto TabWidget.
Dai uno sguardo agli esempi di Fred per maggiori informazioni e contesti riguardanti le dichiarazioni delle variabili e altri trucchi.

+0

tv è nullo , findViewById (android.R.id.title) non lo trova – trampster

20

La risposta di Danny C è corretta al 100%. Volevo solo aggiungervi qualcosa per ottenere una risposta completa con il file di risorse.

Il text_tab_indicator in File res/colore

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
<item android:textColor="@color/text_tab_selected" 
    android:state_selected="true" /> 
<item android:textColor="@color/text_tab_unselected" 
    android:state_selected="false" /> 
</selector> 

E questo text_tab_unselected & text_tab_selected sarà simile a questo sotto i colori/valori cartella

<resources> 
<color name="text_tab_selected">#ffffff</color> 
<color name="text_tab_unselected">#95ab45</color> 

Dopo che finalmente aggiungere la risposta di Dannyy in scheda classe file

final TextView tv = (TextView) tabWidget.getChildAt(i).findViewById(android.R.id.title);   
tv.setTextColor(this.getResources().getColorStateList(R.color.text_tab_indicator)); 
+3

'android: textColor' dovrebbe essere' android: color' nel file text_tab_indicator.xml. – iStar

+2

getColorStateList è deprecato, quindi utilizzare ContextCompat.getColorStateList (context, R.color.text_tab_indicator). – CoolMind

+0

non riesce perché la tv è nullo, non sembra essere in grado di trovare un TextView con il titolo id. Il mio codice è in OnCreate del frammento contenente il TabLayout – trampster

5

Il cambio di colore può anche essere dichiarato senza usare java - che è probabilmente meglio.

ho fatto modifiche al text_tab_indicator (avviso textColor è stato cambiato in 'color'):

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:color="@color/text_tab_selected" /> 
    <item android:state_selected="false" android:color="@color/text_tab_unselected" /> 
</selector> 

impostare lo stile del TabWidget per puntare a uno stile specifico nel codice xml:

<TabWidget 
    ... 
    style="@style/TabText" 
    /> 

dichiarare il vostro text_tab_indicator situato in/res/colore come avete voluto il colore in stile

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

Ha funzionato come un fascino (per me).

Cheers, Randall

+0

Anche se questa soluzione sembra perfetta, non ha funzionato su entrambi i miei dispositivi (Android 5 e 2.3). – CoolMind