2017-02-08 6 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에 온다 내 코드입니다.

답변

1

당신이 당신이 스타일 = "@ 스타일/tabText"와 텍스트 뷰를 포함하는 사용자 정의 탭 레이아웃을 사용했습니다 가정 선택기

를 사용하여 탭의 텍스트 뷰에 스타일을 설정할 수 있습니다. 색상은 속성

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

다음 설정

드로어 블/사진 text_selector_tab.xml :

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

는 선택기를 사용하여 텍스트 색상을 설정 선택된 상태와 선택되지 않은 상태 (즉, 여기에 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> 

이 탭의 텍스트 뷰가 스타일에 연결되는 방식이다. 플랫폼 SDK의 표준 탭 레이아웃 XML을 살펴보면 아이콘 및 텍스트가 어떻게 작동하는지 알 수 있고 이에 따라 레이아웃을 조정할 수 있습니다.

+0

코드에서 탭을 만들 때 텍스트를 만들기 때문에 프로그래밍 방식으로 스타일을 추가 할 수 있습니까? – thproflord

+0

TextView에서 스타일을 설정하는 방법을 보여주기 위해 내 대답을 편집했습니다. – CSmith