2017-02-08 25 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; 
    } 
} 

私はテキストの色が細かいですが、明らかにアイコンが変更されません
tab.setIcon();を消去した場合、問題が OnTabUnselectedに来るために私のコードです。あなたは、セレクタ

を使用して、タブ上のTextViewにスタイルを設定することができます

答えて

1

これは、スタイル=「@スタイル/ tabText」とのTextViewを含むカスタムタブレイアウトを使用しました想定しています。

値/の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を設定します。

描画可能/ 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およびcolorDeselectedとして示されている。

カスタムレイアウトを使用して、タブをカスタマイズすることができます。

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のがスタイルに縛ら取得する方法です。プラットフォームSDKの標準のタブレイアウトXMLを掘り下げて、アイコンやテキストの仕組みを確認し、それに応じてレイアウトを調整することができます。

+0

コードでタブを作成するときにテキストを作成するので、プログラムでスタイルを追加できますか? – thproflord

+0

私の回答を編集して、TextViewでスタイルを設定する方法を示しました – CSmith

関連する問題