2015-06-22 4 views
12

Sto utilizzando il nuovo supporto TabLayout di Android. Il fatto è che volevo usare i selettori per cambiare l'icona quando una scheda è selezionata.Come utilizzare i selettori per cambiare le icone con il nuovo TabLayout

Ho cercato nel codice sorgente e mi sembra che non cambi mai lo stato della vista (e per questo motivo non posso usare il selettore).

Qualcuno sa qualche soluzione?

Grazie!

+0

come u risolto ur problema perché la mia non è sempre risolto da CustomView – Erum

risposta

1

C'è un modo per impostare customView come una scheda con il metodo setCustomView(View view). Quindi puoi creare una vista testuale e impostare un selettore su di essa e impostare questa vista in una scheda.

Spero che ti aiuti!

0

Se hai fatto tutto bene (e credo questo) sei arrivato allo stesso punto di me. Forse è un piccolo bug nella nuova libreria appcompat di Android.

ho trovato una soluzione (si chiama Gambiarra in un buon portoghese) per risolvere questo problema. è necessario chiamare il metodo select() dalla classe Tab in questo modo:

mTabLayout.getTabAt(x).select(); 

ma è molto importante: variabile x deve essere diverso da quello attuale indice di scheda selezionata.

43

assumete il vostro my_selector.xml è,

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:drawable="@drawable/icon_on" android:state_selected="true"/> 
    <item android:drawable="@drawable/icon_off"/> <!-- default --> 
</selector> 

quindi è possibile chiamare direttamente setIcon,

tab.setIcon(R.drawable.my_selector); 

verificata con 'com.android.support:design:22.2.0'.

+4

Questa dovrebbe essere la risposta accettata .. – FingerSmith

+0

Funziona alla grande ma ho riscontrato un capriccio. La prima scheda non viene selezionata. Sono solo io? Ho provato a impostare manualmente il cercapersone su 0 ('pager.setCurrentItem (0);') – iroyo

+0

il metodo setIcon non può essere risolto – kgandroid

1

Ho scoperto che quando imposto la visualizzazione personalizzata per ogni scheda in TabLayout, è necessario impostare il primo (indice 0) come selezionato.

TabLayout toolbarTabLayout = (TabLayout) findViewById(R.id.tabs); 
    toolbarTabLayout.setupWithViewPager(mViewPager); 
    toolbarTabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 
    toolbarTabLayout.setTabMode(TabLayout.MODE_FIXED); 
    toolbarTabLayout.setTabTextColors(R.color.colorPrimary, R.color.white); 
    // Iterate over all tabs and set the custom view 
    for (int i = 0; i < toolbarTabLayout.getTabCount(); i++) { 
     TabLayout.Tab tab = toolbarTabLayout.getTabAt(i); 
     View v=mSectionsPagerAdapter.getTabView(i); 
     // no tabs are actually selected at start, this will make sure the 
     // selector for the colors comes in right when initialized 
     if (i==0) 
      v.setSelected(true); 
     tab.setCustomView(v); 
    } 

Sembra forzare la prima scheda come selezionata quando viene applicata la vista personalizzata. Sembra davvero un trucco, speriamo che qualcun altro possa capire il vero problema e proporre una soluzione migliore.

0

Questo è ciò che ha funzionato per me:

Supponendo di avere i vostri selettori impostati nella cartella res drawable (come Xingang Huang mostrato sopra). Nella tua MainActivity (dove si imposta il TabLayout) si include la matrice di selettori icona e poi si esegue un ciclo come questo:

for (int i = 0; i < yourTabLayout.getTabCount(); i++) { 
     ImageView imageView = new ImageView(this); //your context, in this case MainActivity.class 
     imageView.setImageResource(arr_tabIcons[i]); //tabIcons is the array of icons 
     if (i==0) { 
      imageView.setSelected(true); 
     } 
     yourTabLayout.getTabAt(i).setCustomView(imageView); 

    } 

tab.setIcon (R.drawable.icon)

funziona bene ma nel mio caso le icone sembravano davvero piccole, quindi ho dovuto usare la soluzione con ImageView per riempire la vista tab.

codifica Felice;)