2016-08-31 2 views
2

Ich verwende Calligraphy Bibliothek, um benutzerdefinierte Schriftart anwenden. Ich habe ein Problem mit TabLayout, wo die Schriftart nicht gilt. Also muss ich es manuell mit dem Follow-Code festgelegt:Ändern Sie die ausgewählte Registerkarte Farbe für Tablayout mit benutzerdefinierten Schriftart

 mViewPager.setAdapter(pagerAdapter); 
     tabLayout.setupWithViewPager(mViewPager); 
     for (int i = 0; i < pagerAdapter.getCount(); i++) { 
      TabLayout.Tab tab = tabLayout.getTabAt(i); 
      if (tab != null) { 
       tab.setCustomView(R.layout.tab_text); 
       tab.setText(pagerAdapter.getPageTitle(i)); 
      } 
     } 

Die XML-Datei auf die benutzerdefinierte Registerkarte Ansicht

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_gravity="center"> 

    <TextView 
     android:id="@android:id/text1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:ellipsize="end" 
     android:gravity="center" 
     android:textSize="@dimen/item_txt_size" 
     android:textColor="@color/progress_color" 
     android:maxLines="2" 
     app:fontPath="fonts/font_regular.ttf" 
     tools:ignore="MissingPrefix" 
     tools:text="User Profile" /> 
</FrameLayout> 

Die XML der Ansicht:

<android.support.design.widget.TabLayout 
    android:id="@+id/tabs" 
    android:layout_below="@id/map_google" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:tabIndicatorColor="@color/progress_color" 
    app:tabIndicatorHeight="@dimen/indicator_height" 
    android:background="@color/actionbar_home" 
    app:tabMode="fixed" 
    app:tabTextColor="@android:color/white" 
    app:tabSelectedTextColor="@color/progress_color" 
    app:tabGravity="fill"/> 

<android.support.v4.view.ViewPager 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/pager" 
    android:layout_below="@id/tabs" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

</android.support.v4.view.ViewPager> 

Das Problem ist die ausgewählte Farbe und die nicht ausgewählten gelten nicht, es ist immer die gleiche Farbe.

Antwort

1

Verwenden Sie die folgenden Verfahren Tabs Schriftart zu ändern:

protected void changeTabsFont(TabLayout tabLayout) { 
     Logger.print("In change tab font"); 
     ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0); 
     int tabsCount = vg.getChildCount(); 
     Logger.print("Tab count--->"+tabsCount); 
     for (int j = 0; j < tabsCount; j++) { 
      ViewGroup vgTab = (ViewGroup) vg.getChildAt(j); 
      int tabChildsCount = vgTab.getChildCount(); 
      for (int i = 0; i < tabChildsCount; i++) { 
       View tabViewChild = vgTab.getChildAt(i); 
       if (tabViewChild instanceof AppCompatTextView) { 
        Logger.print("In font"); 
        Typeface type = Typeface.createFromAsset(getContext().getAssets(),"Helvetica_57_Condensed.otf"); 
        TextView viewChild = (TextView) tabViewChild; 
        viewChild.setTypeface(type); 
        viewChild.setAllCaps(false); 
       } 
      } 
     } 
    } 

Um diese Registerkarte Textfarbe Verwendung definieren die folgenden Stil in styles.xml

<style name="tab_layout"> 
     <item name="android:background">@color/background_blue</item> 
     <item name="tabTextColor">@color/tab_unselected</item> 
     <item name="tabSelectedTextColor">@color/white</item> 
     <item name="android:actionBarDivider">@color/background_blue</item> 
     <item name="tabTextAppearance">?android:textAppearanceMedium</item> 
     <item name="tabIndicatorHeight">4dp</item> 
    </style> 

und setzen zu ändern Stil zu Ihrem Tab-Layout:

<android.support.design.widget.TabLayout 
      android:id="@+id/tabs_profile" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      app:tabMode="fixed" 
      style="@style/tab_layout" 
      app:tabGravity="fill"/> 
+1

Vielen Dank, Sie haben mich gerettet –

1
tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { 
      @Override 
      public void onTabSelected(TabLayout.Tab tab) { 
      if (tab != null && tab.getCustomView() != null) 
        // set unselected color 
      } 
      @Override 
      public void onTabUnselected(TabLayout.Tab tab) { 
       if (tab != null && tab.getCustomView() != null) 
        // set unselected color 
      } 

      @Override 
      public void onTabReselected(TabLayout.Tab tab) { 
       onTabSelected(tab); 
      } 
     }); 
Verwandte Themen