2017-02-08 6 views
0

Ich habe ein Problem mit Tabs in meiner App. Wenn ich eine Registerkarte auswähle, möchte ich das Symbol und die Textfarbe ändern. Wenn ich auf eine andere Registerkarte wechsle, müssen das Symbol und die Textfarbe in die neutrale Farbe geändert werden.Ändern Sie die Textfarbe in ausgewählten Registerkarte

Ich habe versucht, dies zu tun, aber während das Symbol ändert, bleibt die Textfarbe gleich.

final TabLayout tabs = (TabLayout) findViewById(R.id.tabs); 
tabs.addTab(tabs.newTab().setIcon(R.mipmap.destacados_act).setText("Destacados")); 
tabs.setSelectedTabIndicatorColor(Color.rgb(255,170,0)); 
tabs.addTab(tabs.newTab().setIcon(R.mipmap.secciones).setText("Secciones")); 
tabs.addTab(tabs.newTab().setIcon(R.mipmap.descargas).setText("Descargas")); 

final ViewPager view_pager = (ViewPager) findViewById(R.id.pager); 
final ViewPagerAdapterPrincipal adapter = new ViewPagerAdapterPrincipal(getSupportFragmentManager(), tabs.getTabCount()); 
view_pager.setAdapter(adapter); 
view_pager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabs)); 

tabs.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
    @Override 
    public void onTabSelected(TabLayout.Tab tab) { 
     view_pager.setCurrentItem(tab.getPosition()); 

     switch (tab.getPosition()) { 
      case 0: 
       tab.setIcon(R.mipmap.destacados_act); 
       tabs.setSelectedTabIndicatorColor(Color.rgb(255,170,0)); 
       break; 
      case 1: 
       tab.setIcon(R.mipmap.secciones_act); 
       tabs.setSelectedTabIndicatorColor(Color.rgb(0,255,255)); 
       break; 
      case 2: 
       tab.setIcon(R.mipmap.descargas_act); 
       tabs.setSelectedTabIndicatorColor(Color.rgb(170,255,0)); 
       break; 
     } 
    } 
    public void onTabUnselected(TabLayout.Tab tab) { 

     switch (tab.getPosition()) { 
      case 0: 
       tab.setIcon(R.mipmap.destacados); 
       break; 
      case 1: 
       tab.setIcon(R.mipmap.secciones); 
       break; 
      case 2: 
       tab.setIcon(R.mipmap.descargas); 
       break; 
     } 
    } 
    public void onTabReselected(TabLayout.Tab tab) { 
    } 
}); 

Hier ist mein Code für den Adapter

public class ViewPagerAdapterPrincipal extends FragmentStatePagerAdapter { 

    int numOfTabs; 

    public ViewPagerAdapterPrincipal(FragmentManager fm, int numOfTabs) { 

     super(fm); 
     this.numOfTabs = numOfTabs; 
    } 

    public Fragment getItem(int position) { 

     switch(position){ 
      case 0 : 
       DestacadosPrincipal tab1 = new DestacadosPrincipal(); 
       return tab1; 
      case 1 : 
       Secciones tab2 = new Secciones(); 
       return tab2; 
      case 2 : 
       Descargas tab3 = new Descargas(); 
       return tab3; 
      default: 
       return null; 
     } 
    } 

    public int getCount() { 
     return numOfTabs; 
    } 
} 

Das Problem kommt in OnTabUnselected wenn ich
tab.setIcon(); Die Textfarbe ist in Ordnung löschen, aber offensichtlich das Symbol ändert sich nicht.

Antwort

1

Sie können einen Stil, um die Textview auf Ihren Tabs setzen einen Selektor

mit diesem vorausgesetzt, dass Sie ein benutzerdefinierten Registerkarte Layout eine Textview mit style = „@ style/tabText“ enthält, verwendet haben.

Werte/styles.xml

<style name="tabText"> 
    <item name="android:textColor">@drawable/text_selector_tab</item> 
    <item name="android:textSize">@dimen/fontTab</item> 
    <item name="android:textAllCaps">true</item> 
</style> 

stellen Sie dann die Textfarbe einen Selektor:

ziehbar/text_selector_tab.xml

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_selected="true" android:color="@color/colorSelected" /> 
    <item android:color="@color/colorDeselected" /> 
</selector> 

dann Farbattribute gesetzt für ausgewählte und nicht ausgewählte Zustände (dh hier als colorSelected und colorDeselected dargestellt.

Sie können Ihre Tabs mit einem benutzerdefinierten Layout anpassen:

layoutTab = (LinearLayout)inflater.inflate(R.layout.layout_tab, null); 
TabLayout.Tab tab = mTabLayout.newTab(); 
tab.setCustomView(layoutTab); 
mTabLayout.addTab(tabHome); 

Layout/layout_tab.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="wrap_content" 
    android:orientation="horizontal" 
    android:gravity="center" 
    android:clipToPadding="false"> 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     style="@style/tabText" /> 

</LinearLayout> 

dies ist, wie die Textview in der Registerkarte auf den Stil gebunden wird. Sie können im Platform SDK in das Standard-XML-Layout für Registerkarten eintauchen, um zu sehen, wie das Symbol und der Text funktionieren, und dieses Layout entsprechend anpassen.

+0

Wie kann ich den Stil programmgesteuert hinzufügen, weil ich den Text beim Erstellen der Registerkarten im Code erstellen – thproflord

+0

Ich habe meine Antwort bearbeitet, um zu zeigen, wie Sie den Stil auf dem TextView festlegen können – CSmith

Verwandte Themen