2012-02-20 22 views
7

Ciao ho due schede nel mio widget di schede, voglio applicare i due colori diversi per due schede che cercano dappertutto, per lo più tutti i colori sono gli stessi mentre si applica la scheda.È possibile cambiare il colore della scheda selezionata in Android?

aggiornamento

prima scheda quando selezionato colore rosso

seconda scheda quando selezionato colore blu

Ecco il mio codice

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); 

risposta

12

Prova questa:

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

per favore aggiorna la mia domanda – Mercy

+0

@micro: vedi il mio aggiornamento risposta. – Hiral

+0

Grazie per il suo funzionamento, ma applico il codice colore Color.green (0xCFEB5D) invece di (color.GREEN) .non funziona perché? – Mercy

7

È possibile impostare Listener per la tua TabHost utilizzando setOnTabChangedListener e cambiare in modo dinamico,

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

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

Creare un metodo che impostare il colore di TabSelected e 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); 
    } 

Quindi all'interno dello onTabChanged() è possibile modificare lo sfondo in modo dinamico.

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

È possibile utilizzare lo stesso per selected e unselected Tab, here è il blog per la stessa.

+0

Grazie, Tipo mancata corrispondenza: impossibile convertire da vuoto a Vista sto ricevendo errore Visualizza vista = myTabHost.getTabWidget(). GetChildAt (scheda) . SetBackgroundColor (Color.CYAN); questa riga – Mercy

+0

Bella idea di alzarsi .... Che dire di schede deselezionate? –

+0

@lalit si prega di aggiornare la mia domanda – Mercy

2

Utilizzare il setIndicator (Panorama vista) al posto di setIndicator (etichetta CharSequence, icona Drawable). L'impostazione di sfondo della vista che passi (ad es. Se stai gonfiando un xml con il layout principale) dovrebbe essere una ColorStateList per gestire i clic.

Problemi correlati