2017-02-08 4 views
0

У меня проблема с вкладками в моем приложении. Когда я выбираю вкладку, я хочу изменить ее цвет и значок. Когда я перехожу на другую вкладку, цвет значка и текста должен измениться на нейтральный цвет.Изменение цвета текста на выбранной вкладке

Я попытался сделать это, но когда значок изменится, цвет текста останется прежним.

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

Вот мой код для адаптера

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

Проблема приходит в OnTabUnselected если я стираю
tab.setIcon(); цвет текста хорошо, но, очевидно, значок не изменится.

ответ

1

Вы можете задать стиль для TextView на вкладки с помощью селектора

Это предполагает, что вы уже использовали пользовательские вкладки компоновки, содержащей TextView со стилем = «@ стиль/tabText».

значения/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> 

затем установите TextColor с помощью селектора:

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

затем установите цвет атрибутов для выбранные и невыбранные состояния (т.е. показано здесь как colorSelected и colorDese lected.

Вы можете настроить вкладки с помощью пользовательского макета:

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

макет/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> 

это как TextView на вкладке получает привязан к стилю. Вы можете вставить в стандартную компоновку вкладок XML в SDK платформы, чтобы увидеть, как работают значок и текст, и соответствующим образом скорректировать этот макет.

+0

Как я могу добавить стиль программно, потому что создаю текст при создании вкладок в коде – thproflord

+0

Я отредактировал свой ответ, чтобы показать, как вы можете установить стиль в TextView – CSmith

Смежные вопросы