2016-03-18 21 views
0

フォントをtablayoutに追加したい。タブはJsonを使用して動的に埋められます。 タブのヘッダーにフォントを追加する方法を教えてください。Tablayoutフォントが変更されない

これはこれは、アダプタで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); 
       } 
      } 
     } 
} 

です。ここでtabnamesは、jsonの解析によって埋められた文字列配列です。

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

}

誰でもtablayout.Iのフォントを変更するために私を助けることができるがsetupPagerが、その動作していないで、これを使用しようとしました。 TabLayoutのXMLファイル内の

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

答えて

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> 

。これをスタイルとして追加します。あなたが望むものに応じてフォントサイズを変更してください。

+0

私はこの1つを試してみました..しかし、私はカスタムフォント「EdgeCaps.ttf」が適用されるようにしたいですTablayout.Howコードを介して行うには? –

+0

これは動作しません。 TextAppearance.Design.Tabはボタンスタイルであり、プレマテリアルデザインボタンはスタイルを使用してカスタムフォントを持つことはできません。 –

2

あなたのコードで何が起こっているか完全にはわからない。しかし、このクラスは役に立ちます。 TabLayoutに新しいタブが追加されるたびに、タブ内のすべてのTextViewをEdgeCaps.tffに設定するだけです。

通常のTabLayoutの代わりに使用し、EdgeCaps.tffフォントをプロジェクトの "assets/fonts"ディレクトリに配置していることを確認してください。
Here's an example of where the font file is meant to go (using Android Studio).

コードはAndroidのサポートライブラリ23.3.0で動作するようにhereから変更されました:

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

私はこれを行っています..しかし、フォントアセットが見つかりませんでしたたびにフォントアセット/ EdgeCaps.tff –

+0

@RohitMishraあなたのプロジェクトのassetsフォルダに "EdgeCaps.tff"というフォントファイルがありますか? – Patrick

+0

はいpatrick私はassets/fontsフォルダにあります –

関連する問題