2016-03-18 2 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, но его не работает.

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> 

Внутри XML-файла TabLayout. добавьте это как стиль. измените шрифт в соответствии с тем, что вы хотите.

+0

Я попытался это один .. Но я хочу пользовательский шрифт «EdgeCaps.ttf», который будет применен на tablayout.Как сделать это с помощью кода? –

+0

Это не работает. TextAppearance.Design.Tab - это стиль кнопки, и похоже, что у пред-материальной кнопки дизайна есть собственный шрифт через стили. –

2

Не совсем уверен, что происходит в вашем коде. Но этот класс может помочь. Все, что он делает, задает все текстовые элементы внутри вкладки EdgeCaps.tff всякий раз, когда новая вкладка добавляется в TabLayout.

Используйте его вместо обычного TabLayout и убедитесь, что вы поместили свой шрифт EdgeCaps.tff в каталог «assets/fonts» вашего проекта.
Here's an example of where the font file is meant to go (using Android Studio).

код был изменен с here для работы с Android Поддержка библиотеки 23.3.0:

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

Я делаю это .. Но каждый раз, когда я получаю исключение, что свойство Font не найдено шрифтов/EdgeCaps.tff –

+0

@RohitMishra вы используете, у вас есть файл шрифта с именем «EdgeCaps.tff» в папке с ресурсами вашего проекта? – Patrick

+0

Да, patrick У меня есть это в папке assets/fonts –

Смежные вопросы