2012-02-20 14 views
7

Witam Mam dwie zakładki w moim widżecie tabulacji, chcę zastosować dwa różne kolory dla dwóch kart.am szukając wszędzie, przeważnie wszystkie kolory są takie same podczas stosowania zakładki.Czy można zmienić kolor wybranej zakładki w systemie Android?

aktualizacja

Pierwsza zakładka gdy wybrany kolor czerwony

druga zakładka gdy wybrany kolor niebieski

Oto mój kod

tabHost = (TabHost)findViewById(android.R.id.tabhost); 
    TabSpec firstTabSpec = tabHost.newTabSpec("tid1");//these are color red 
    TabSpec secondTabSpec = tabHost.newTabSpec("tid1");//these color blue 
    firstTabSpec.setIndicator("Sales Info",getResources().getDrawable(R.drawable.sales)); 
    Intent photosIntent = new Intent(this, a.class); 
    firstTabSpec.setContent(photosIntent); 
    secondTabSpec.setIndicator("Service Info",getResources().getDrawable(R.drawable.services)); 
    Intent photosIntent1 = new Intent(this, b.class); 
    secondTabSpec.setContent(photosIntent1); 
    tabHost.addTab(firstTabSpec); 
    tabHost.addTab(secondTabSpec); 

Odpowiedz

12

Spróbuj tego:

...onCreate(){ 

    ... 
    tabHost.setOnTabChangedListener(new OnTabChangeListener() { 

    @Override 
    public void onTabChanged(String arg0) { 

     setTabColor(tabHost); 
    } 
    }); 
    setTabColor(tabHost); 
... 
} 

//Change The Backgournd Color of Tabs 
public void setTabColor(TabHost tabhost) { 

    for(int i=0;i<tabhost.getTabWidget().getChildCount();i++) 
     tabhost.getTabWidget().getChildAt(i).setBackgroundColor(COLOR_CYAN); //unselected 

    if(tabhost.getCurrentTab()==0) 
      tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(COLOR_RED); //1st tab selected 
    else 
      tabhost.getTabWidget().getChildAt(tabhost.getCurrentTab()).setBackgroundColor(COLOR_BLUE); //2nd tab selected 
} 
+0

proszę zaktualizować moje pytanie – Mercy

+0

@micro: zobacz mój zaktualizowany odpowiedź. – Hiral

+0

Dziękuję, że hiral działa, ale stosuję kod koloru Color.green (0xCFEB5D) zamiast (color.GREEN). Nie działa, dlaczego? – Mercy

7

Można ustawić Listener dla Twojego TabHost użyciu setOnTabChangedListener i zmienić go dynamicznie,

public void onCreate(Bundle savedInstanceState){ 
    // add your tabs here 

    // set the First Tab as selected Tab. 
    setSelectedTabColor(); 
} 

utworzyć metodę, która będzie wyznaczać kolor TabSelected i Unselected.

private void setSelectedTabColor() { 
     for(int i=0;i<tabHost.getTabWidget().getChildCount();i++) 
     { 
      tabHost.getTabWidget().getChildAt(i) 
              .setBackgroundColor(Color.WHITE); 
     } 
     tabHost.getTabWidget().getChildAt(tabHost.getCurrentTab()) 
               .setBackgroundColor(Color.RED); 
    } 

Następnie wewnątrz swojego onTabChanged() można dynamicznie zmieniać tło.

@Override 
    public void onTabChanged(String tabId) { 
     setSelectedTabColor(); 
    } 

można wykorzystywać takie same dla selected i unselected zakładce here jest blog dla tego samego.

+0

Dziękuję Niezgodność typów: nie można przekonwertować z void aby zobaczyć otrzymuję błąd view = myTabHost.getTabWidget() getChildAt (tab) .setBackgroundColor (Color.CYAN). this line – Mercy

+0

Dobry pomysł, aby wstać .... A co z niezaznaczonymi zakładkami? –

+0

@lalit proszę zaktualizować moje pytanie – Mercy

2

Użyj setIndicator (Widok) zamiast setIndicator (etykiecie CharSequence, rozciągliwej ikon). Ustawienie tła widoku, które prześlesz (np. Jeśli nadpisujesz xml, układ nadrzędny), powinno być ColorStateList, aby obsłużyć kliknięcia.

Powiązane problemy