2010-01-20 15 views
47

Meine Klasse erweitert TabActivityWie ändere ich den Hintergrund eines Android-Tab-Widgets? erstreckt

TabHost mTabHost = getTabHost(); 

TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); 
TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); 

tab1 .setIndicator("title tab1"); 
tab2 .setIndicator("title tab2"); 
mTabHost.addTab(tab1);mTabHost.addTab(tab2); 

TabHost.setCurrentTab(0 or 1) 

jemand mich leiten kann, wie der ausgewählte Tab kann ich das Hintergrundbild oder die Farbe ändern?

Antwort

25

Was passiert, wenn Sie sich für TabHost.OnTabChanged-Ereignisse registrieren und mTabHost.getCurrentTabView() aufrufen, um die Ansicht zu erhalten, dann view.setBackgroundResource()?

2

Kann this Ihr Problem lösen? Rufen Sie setBackgroundDrawable auf jeder Registerkarte mit einem Selektor auf?

93

Dies wird Ihre Registerkarte Farben eingestellt:

public static void setTabColor(TabHost tabhost) { 
    for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) { 
     tabhost.getTabWidget().getChildAt(i).setBackgroundColor(Color.parseColor("#FF0000")); //unselected 
    } 
    tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(Color.parseColor("#0000FF")); // selected 
} 

und wenn Sie es in den onTabChangedListener() setzen, wird es die richtige Farbe für ausgewählte Registerkarten halten.

+0

Vielen Dank, das hat mir wirklich geholfen. Gibt es eine Möglichkeit, diesen Ansatz in XML zu implementieren? – teoREtik

+1

@teoREtik XML ist ein statischer Inhalt, nur für den Fall, dass Ihre Aktivität zum ersten Mal gestartet wird (Layout-Initialisierung), also nein. – Blundell

+0

Vielen Dank für Ihre Hilfe .. Diese Antwort ist sehr hilfreich .. +1 für das .. Prost .. !! – Aditya1510

36

Wie mbaird erwähnt, ist die bessere Lösung, Hintergrund mit Selektor zu verwenden, also müssen Sie onTabChanged nicht überprüfen und manuelle Aktualisierung tun. Der minimale Code ist hier:

private void initTabsAppearance(TabWidget tabWidget) { 
    // Change background 
    for(int i=0; i < tabWidget.getChildCount(); i++) 
     tabWidget.getChildAt(i).setBackgroundResource(R.drawable.tab_bg); 
} 

Wo tab_bg ist ein XML-ziehbar mit Selektor:

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

Für die volle Tab Anpassung werde ich den Code zum Ändern Registerkarte Textstil mit benutzerdefinierten Designs hinzufügen. Fügen Sie diese auf styles.xml:

<resources> 

    <style name="MyCustomTheme" parent="@android:style/Theme.Light.NoTitleBar"> 
     <item name="android:tabWidgetStyle">@style/CustomTabWidget</item> 
    </style> 

    <style name="CustomTabWidget" parent="@android:style/Widget.TabWidget"> 
     <item name="android:textAppearance">@style/CustomTabWidgetText</item> 
    </style> 

    <style name="CustomTabWidgetText" parent="@android:style/TextAppearance.Widget.TabWidget"> 
     <item name="android:textSize">12sp</item> 
     <item name="android:textStyle">bold</item> 
    </style> 

</resources> 

dieses Thema zu verwenden, definieren Sie es in AndroidManifest.xml:

<application android:theme="@style/MyCustomTheme"> 

Und jetzt haben Sie Tab Widgets mit benutzerdefinierten Hintergrund und benutzerdefinierte Textstil.

0

Ich legte den 'android: background' Parameter im TabWidget Element des XML um den generischen Hintergrund aller Registerkarten zu geben.

Dann habe ich Ansichten aus einem anderen XML in der '.setIndicator' Methode aufgeblasen.

View v = LayoutInflater.from(this).inflate(R.layout.tab_widget, null); 
    TextView label = (TextView) v.findViewById(R.id.tabLabel); 
    label.setText("Whatever"); 
tab1 .setContent(v); 

Ich fühle, dass das eine bessere Möglichkeit ist, dies zu tun.

2
>  TabHost mTabHost = getTabHost(); 
>  
>  TabHost.TabSpec tab1 =mTabHost.newTabSpec("tab1"); 
>  TabHost.TabSpec tab2 =mTabHost.newTabSpec("tab2"); 
>  
>  tab1.setIndicator("title tab1"); 
>  tab2.setIndicator("title tab2"); 
>  mTabHost.addTab(tab1) ;mTabHost.addTab(tab2); 
>  
>  TabHost.setCurrentTab(0 or 1); 


mTabHost.getTabWidget().getChildAt(0).setBackgroundResource(R.drawable.tab1selector); 

mTabHost.getTabWidget().getChildAt(1).setBackgroundResource(R.drawable.tab2selector);  

mTabHost.getTabWidget().getChildAt(2).setBackgroundResource(R.drawable.tab3selector);  

mTabHost.getTabWidget().getChildAt(3).setBackgroundResource(R.drawable.tab4selector); 

Verwenden .setBackgroundResource und tabNselector ist ein XML - tabNselector.xml

<?xml version="1.0" encoding="UTF-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="false" android:drawable="@drawable/tabN"/> 
    <item android:state_selected="true" android:drawable="@drawable/tabNsel" /> 
</selector> 
Verwandte Themen