2010-05-10 12 views

Odpowiedz

24

Style to w niestandardowym zmiany motywu

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

i

<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

masz. przez ten link: http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/res/res/values/themes.xml;h=6b3d7407d1c895a3c297e60d5beac98e2d34c271;hb = HEAD i odsyłaj APIDemos. Dzięki . – Praveen

+3

@DroidBase, @Alex Volovoy, gdzie powinienem umieścić style. Kiedy umieściłem go jako osobny plik xml w folderze wartości, otrzymałem komunikat o błędzie "Błąd podczas pobierania elementu nadrzędnego dla elementu: Nie znaleziono zasobu pasującego do podanej nazwy" Widget ". –

+0

@Mithun: Podaj fragment kodu znajdź dokładne rozwiązanie. Domyślam się, że nie wspomniałeś o atrybucie nadrzędnym. to jest przesłonięcie domyślnego stylu obiektu xml – Praveen

29

Oto nowa odpowiedź znalazłem od Fred Grott (http://knol.google.com/k/fred-grott/advance-tabs/) po krótkim poszukiwaniu internetowej.
Pozwala to ustawić kolor tekstu jako selector, aby można było użyć innego koloru, gdy wybrana jest karta. Które mogą być bardzo przydatne, jeśli używasz innego koloru tła dla karty, jeśli jest wybrana. Oczywiście możesz po prostu rzucić zwykły kolor, a nie selektor.

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

Gdzie R.color.text_tab_indicator jest selector xml file położony w RES/folderu rozciągliwej.

Innymi słowy, tekst wskaźnika to naprawdę TextView, który można odtworzyć za pomocą obiektu View, do którego można uzyskać dostęp z obiektu TabWidget.
Rzuć okiem na przykłady Freda, aby uzyskać więcej informacji i kontekst dotyczący deklaracji zmiennych, a także innych sztuczek.

+0

tv is null , findViewById (android.R.id.title) nie znajduje go – trampster

20

Odpowiedź Danny'ego C jest w 100% poprawna. Chciałem tylko dodać coś, aby uzyskać kompletną odpowiedź z plikiem zasobów.

text_tab_indicator pod pliku res/color

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

I to text_tab_unselected & text_tab_selected będzie wyglądać pod kolorach/wartości folderowi

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

Potem wreszcie dodać odpowiedź Dannyy w plik z zakładkami

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' powinno być' android: color' w pliku text_tab_indicator.xml. – iStar

+2

getColorStateList jest przestarzałe, więc użyj ContextCompat.getColorStateList (context, R.color.text_tab_indicator). – CoolMind

+0

kończy się niepowodzeniem, ponieważ telewizor ma wartość null, nie można znaleźć TextView z tytułem id. Mój kod znajduje się w OnCreate fragmentu zawierającego TabLayout – trampster

5

Zmiana koloru może być również podana bez użycia java - co prawdopodobnie jest lepsze.

Zrobiłem zmiany w text_tab_indicator (Zawiadomienie textColor została zmieniona na „kolor”):

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

Ustaw styl TabWidget zwrócić się do konkretnego stylu w kodzie XML:

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

Deklarują swoją text_tab_indicator zlokalizowany w/RES/kolor, jak pożądany kolor w stylu

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

To działało jak czar (dla mnie).

Pozdrowienia, Randall

+0

Chociaż to rozwiązanie wygląda idealnie, nie działało ono na obu moich urządzeniach (Android 5 i 2.3). – CoolMind

Powiązane problemy