2009-04-21 12 views
17

So come mettere l'icona su ogni scheda, che non è un problema. Ho anche imbattuto in questo: [overflow dello stack thread su più o meno stessa cosa] [1]Android: Personalizzazione delle schede su stato: Come faccio a rendere un selettore un elemento selezionabile

ho seguito uno dei collegamenti da questa domanda e trovati [questo] [2]

Praticamente, ha detto usare un selettore definito nell'XML, certo, è successo. Ma non esiste un ID associato, quindi non sono sicuro di come ottenere la funzione di selezione come un drawable, quindi posso usarla come icona per le schede. Forse sto andando su questo nel modo sbagliato. Ma questo è quello che ho, e ovviamente mi manca qualcosa.

<selector 
    android:id="@+id/myselector" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Non focused states --> 
    <item 
     android:state_focused="false" 
     android:state_selected="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/darklogo" /> 
    <item 
     android:state_focused="false" 
     android:state_selected="true" 
     android:state_pressed="false" 
     android:drawable="@drawable/lightlogo" /> 

    <!-- Focused states --> 
    <item 
     android:state_focused="true" 
     android:state_selected="false" 
     android:state_pressed="false" 
     android:drawable="@drawable/lightlogo" /> 
    <item 
     android:state_focused="true" 
     android:state_selected="true" 
     android:state_pressed="false" 
     android:drawable="@drawable/lightlogo" /> 

    <!-- Pressed --> 
    <item 
     android:state_pressed="true" 
     android:drawable="@drawable/lightlogo" /> 
</selector> 

Nel mio codice, una linguetta di esempio viene generato utilizzando:

host.addTab(host.newTabSpec("three") 
       .setIndicator("map",drawables) 
       .setContent(new Intent(this, Map.class))); 

In questo momento drawable è solo un riferimento a una risorsa immagine disegnabile. Come faccio a rendere il selettore un disegnabile?

Questa è la mia domanda [1]: Updating Android Tab Icons [2]: http://groups.google.com/group/android-evelopers/browse_thread/thread/ef3bdebcb715b385

risposta

20

L'XML hai inserito qui è un modo di definire un drawable che consente di incorporare un'istruzione case. Presenta un diverso drawable a seconda dello stato della vista a cui è assegnato. Come drawable, dovresti salvarlo come file xml all'interno della cartella res/drawable del tuo progetto (ad esempio tabselector.xml).

Per utilizzarlo per il Tabhost, è necessario costruire TabActivity come si farebbe normalmente (come mostrato in questo tutorial example).

Quindi, quando si aggiunge ciascuna scheda all'host, si specifica il parametro tabselector come indicatore come mostrato per "TAB 1" di seguito.

Drawable mySelector = getResources().getDrawable(R.drawable.tabselector); 

mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB 1", mySelector).setContent(R.id.textview1)); 
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2)); 

Nota: non può cambiamento del colore della scheda sfondi dietro le icone a questo punto.

+0

Come al solito. Grazie mille. Penso che non averlo la mia mia cartella disegnabile era il mio problema più grande. Grazie per aver incluso del codice per farmi muovere .. Lo apprezzo. – Chrispix

+0

è possibile ora? Voglio dire la tua dichiarazione Nota. controlla la mia domanda per favore: http://stackoverflow.com/questions/2810075/customizing-tab-indicator-images-in-android – Praveen

1

È possibile utilizzare una vista come indicatore, in questo modo è possibile personalizzarlo nel modo desiderato.

mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator(View MyView).setContent(R.id.textview1)); 
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2)); 

La prima scheda utilizzerà una vista come indicatore e la seconda un valore di CharSequence. Dai un'occhiata alla classe TabSpec attuale (http://developer.android.com/reference/android/widget/TabHost.TabSpec.html).

+0

Funziona su Android 1.6. Non dimenticarlo. –

Problemi correlati