2015-06-22 1 views
12

Ich benutze die neue Unterstützung TabLayout von Android. Die Sache ist, dass ich Selektoren verwenden wollte, um das Symbol zu ändern, wenn eine Registerkarte ausgewählt ist.So verwenden Sie Selektoren, um Symbole mit dem neuen TabLayout zu ändern

Ich habe in den Quellcode geschaut und es scheint mir, dass es den Zustand der Ansicht nie ändert (und aus diesem Grund kann ich den Selektor nicht verwenden).

Kennt jemand eine Workaround?

Vielen Dank!

+0

wie u ur Problem behoben, weil ich ist nicht von Custom – Erum

Antwort

1

Es gibt eine Möglichkeit, customView als Registerkarte mit setCustomView(View view) Methode festzulegen. Sie können also eine Textansicht erstellen und einen Selektor darauf setzen und diese Ansicht auf die Registerkarte setzen.

Hoffe es hilft dir!

0

Wenn du alles richtig gemacht hast (und ich glaube das), bist du am selben Punkt angekommen wie ich. Vielleicht ist es ein kleiner Fehler in der neuen Android-Appcompat-Bibliothek.

Ich habe einen Workaround gefunden (es heißt Gambiarra in einem guten Portugiesisch), um dieses Problem zu lösen. müssen Sie die Methode wählen() von Tab Klasse wie folgt nennen:

mTabLayout.getTabAt(x).select(); 

aber es ist sehr wichtig: x Variable als aktuell ausgewählte Registerkarte Index unterschiedlich sein müssen.

43

Angenommen Ihr my_selector.xml ist,

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

dann direkt SetIcon nennen kann,

tab.setIcon(R.drawable.my_selector); 

mit 'com.android.support:design:22.2.0' bestätigt.

+4

gelöst bekommt Dies sollte die akzeptierte Antwort sein .. – FingerSmith

+0

Das funktioniert großartig, aber ich habe eine Eigenart gefunden. Die erste Registerkarte wird nicht ausgewählt. Ist es nur ich? Ich habe versucht, den Pager manuell auf 0 setzen ('pager.setCurrentItem (0);') – iroyo

+0

setIcon Methode kann nicht gelöst werden – kgandroid

1

Ich habe festgestellt, dass, wenn ich zuerst die benutzerdefinierte Ansicht für jede Registerkarte im TabLayout eingestellt habe, muss ich die erste (Index 0) als ausgewählt festlegen.

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

Dies scheint zu erzwingen, dass die erste Registerkarte ausgewählt wird, wenn die benutzerdefinierte Ansicht angewendet wird. Es fühlt sich wirklich an wie ein Hack, hoffentlich wird jemand anderes das wirkliche Problem herausfinden und eine bessere Lösung vorschlagen.

0

Dies ist, was für mich gearbeitet:

Sie haben Ihre Wähler setzen im ziehbar res Ordner Unter der Annahme (wie Xingang Huang oben gezeigt). In Ihrem MainActivity (wo Sie Ihre Setup TabLayout) Sie Ihr Array von Symbol Selektoren umfassen und dann Sie Schleife durch sie wie folgt aus:

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)

funktioniert auch, aber in meinem Fall die Symbole sah wirklich klein aus, so musste ich die Lösung mit dem ImageView verwenden, um die Registerkartenansicht zu füllen.

Glücklich Codierung;)

Verwandte Themen