2016-03-18 19 views
0

Ich möchte eine Schriftart zum Tablayout hinzufügen. Die Registerkarten werden dynamisch mit Json gefüllt. Bitte schlagen Sie mir vor, wie Sie den Tab-Kopfzeilen eine Schriftart hinzufügen.Tablayout Schriftart nicht ändern

Dies ist der tablayout

private void setupPager() { 
     viewPager.setAdapter(new CustomAdapter(getActivity().getSupportFragmentManager(),getContext())); 
     tabLayout.setupWithViewPager(viewPager); 
     Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), "EdgeCaps.ttf"); 
     ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0); 
     int tabsCount = vg.getChildCount(); 
     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 TextView) { 
        ((TextView) tabViewChild).setTypeface(tf); 
       } 
      } 
     } 
} 

Dies ist der Adapter. Tabnames sind hier ein String-Array, das von json parsing gefüllt wird.

private class CustomAdapter extends FragmentPagerAdapter { 
     public CustomAdapter(FragmentManager supportFragmentManager, Context applicationContext) { 
      super(supportFragmentManager); 
     } 

     @Override 
     public Fragment getItem(int position) { 
      Fragment fragment = new ItemsMenuFragment(); 
      return fragment; 
     } 
     @Override 
     public int getCount() { 
      return tabNames.size(); 
     } 

     @Override 
     public CharSequence getPageTitle(int position) { 
      return tabNames.get(position); 
     } 
    } 

}

Kann mir jemand helfen, die Schriftart des tablayout.I zu ändern versucht haben, dies in dem setupPager zu verwenden, aber es funktioniert nicht.

Typeface tf = Typeface.createFromAsset(getActivity().getAssets(), "EdgeCaps.ttf"); 
      ViewGroup vg = (ViewGroup) tabLayout.getChildAt(0); 
      int tabsCount = vg.getChildCount(); 
      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 TextView) { 
         ((TextView) tabViewChild).setTypeface(tf); 
        } 
       } 
      } 

Antwort

0
<style name="NavigationTab" parent="Widget.Design.TabLayout"> 
    <item name="tabBackground">@drawable/background_tab</item> 
    <item name="tabSelectedTextColor">@color/primary_light</item> 
    <item name="tabIndicatorColor">@color/blue</item> 
    <item name="tabTextAppearance">@style/NavigationTabTextAppeareance</item> 
</style> 

<style name="NavigationTabTextAppeareance" parent="TextAppearance.Design.Tab"> 
    <item name="android:textColor">@color/primary_light</item> 
    <item name="android:textSize">12sp</item> 
</style> 

Innerhalb der TabLayout XML-Datei. füge das als Stil hinzu. Ändern Sie die Schriftgröße nach Ihren Wünschen.

+0

ich dieses versucht haben .. Aber ich möchte eine eigene Schriftart "EdgeCaps.ttf" angewendet werden zum tablayout.Wie das über den Code zu tun? –

+0

Dies funktioniert nicht. TextAppearance.Design.Tab ist ein Button-Stil und es sieht so aus, als ob eine Pre-Material-Design-Schaltfläche keine benutzerdefinierte Schriftart über Styles haben kann. –

2

Nicht ganz sicher, was in Ihrem Code vor sich geht. Aber diese Klasse könnte helfen. Alles, was es tut, ist, alle TextViews in einem Tab auf EdgeCaps.tff zu setzen, wenn ein neuer Tab zum TabLayout hinzugefügt wird.

Verwenden Sie es anstelle eines normalen TabLayout und stellen Sie sicher, dass Sie Ihre EdgeCaps.tff-Schriftart in das Verzeichnis "assets/fonts" Ihres Projekts eingefügt haben.
Here's an example of where the font file is meant to go (using Android Studio).

Code wurde von here modifiziert mit Android Support Library 23.3.0 zu arbeiten:

public class CustomFontTabLayout extends TabLayout { 
    private Typeface mCustomTypeFace; 

    public CustomFontTabLayout(Context context, AttributeSet attrs, int defStyleAttr) { 
     super(context, attrs, defStyleAttr); 
     initialise(); 
    } 

    public CustomFontTabLayout(Context context) { 
     super(context); 
     initialise(); 
    } 

    public CustomFontTabLayout(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     initialise(); 
    } 
    private void initialise() 
    { 
     // Note: Rename "EdgeCaps.tff" to whatever your font file is named. 
     // Note that the font file needs to be in the assets/fonts/ folder. 
     mCustomTypeFace = Typeface.createFromAsset(getContext().getAssets(), "fonts/EdgeCaps.tff"); 
    } 

    @Override 
    public void addTab(@NonNull Tab tab, boolean setSelected) { 
     super.addTab(tab, setSelected); 
     setTabTypeFace(tab); 
    } 

    @Override 
    public void addTab(@NonNull Tab tab, int position, boolean setSelected) { 
     super.addTab(tab, position, setSelected); 
     setTabTypeFace(tab); 
    } 

    private void setTabTypeFace(Tab tab) 
    { 
     ViewGroup tabLayoutView = (ViewGroup)getChildAt(0); 
     ViewGroup tabView = (ViewGroup) tabLayoutView.getChildAt(tab.getPosition()); 
     int tabViewChildCount = tabView.getChildCount(); 
     for (int i = 0; i < tabViewChildCount; i++) { 
      View tabViewChild = tabView.getChildAt(i); 
      // Find the TextView in the tab 
      if (tabViewChild instanceof TextView) { 
       TextView tabTextView = (TextView)tabViewChild; 
       // Set the TextView's font 
       tabTextView .setTypeface(mCustomTypeFace, Typeface.NORMAL); 
      } 
     } 
    } 
} 
+0

Ich mache das .. Aber jedes Mal, wenn ich eine Ausnahme bekomme, dass Font Asset nicht gefunden Schriftarten/EdgeCaps.tff –

+0

@RohitMishra verwenden Sie haben eine Schriftart-Datei namens "EdgeCaps.tff" im Ordner Vermögenswerte Ihres Projekts? – Patrick

+0

Ja patrick ich habe es im Ordner Assets/Schriftarten –