2016-03-03 2 views
0

Я хочу использовать TabLayout и ViewPager в моем приложении, но я хочу установить собственный шрифт для TabLayout, но я не могу этого!
Я использую этот код:Как установить пользовательский шрифт для TabLayout в Android?

Typeface droidSerifMonoTF = Typeface.createFromAsset(getAssets(), "fonts/DroidSerif.ttf"); 

for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
      TextView t = new TextView(this); 
      t.setText(mSectionsPagerAdapter.getPageTitle(i)); 
      t.setTypeface(droidSansMonoTF); 

      actionBar.addTab(actionBar.newTab() 
        .setCustomView(t) 
        .setTabListener(this)); 

     } 

по этой ссылке: Link но не работают со мной!
Как это сделать?

+0

любая ошибка подходит или шрифт не применяется? –

+1

Вы используете setCustomView() и определяете шрифт для TextView в макете xml, см. Здесь: http://stackoverflow.com/questions/31698756/remove-line-break-in-tablayout –

+0

@ DanielNugent, tnx мой дорогой друг <3 –

ответ

2

Вы можете сделать это, расширив TabLayout класс. Override OnLayout метод как ниже:

@Override 
protected void onLayout(boolean changed, int left, int top, int right, int bottom){ 
    super.onLayout(changed, left, top, right, bottom); 

    final ViewGroup tabStrip = (ViewGroup)getChildAt(0); 
    final int tabCount = tabStrip.getChildCount(); 
    ViewGroup tabView; 
    int tabChildCount; 
    View tabViewChild; 

    for(int i=0; i<tabCount; i++){ 
     tabView = (ViewGroup)tabStrip.getChildAt(i); 
     tabChildCount = tabView.getChildCount(); 
     for(int j=0; j<tabChildCount; j++){ 
      tabViewChild = tabView.getChildAt(j); 
      if(tabViewChild instanceof AppCompatTextView){ 
       if(fontFace == null){ 
        fontFace = Typeface.createFromAsset(context.getAssets(), context.getString(R.string.IranSans)); 
       } 
       ((TextView) tabViewChild).setTypeface(fontFace, Typeface.BOLD); 
      } 
     } 
    } 
} 

Должен Переписать OnLayout метод, потому что, когда вы используете метод setupWithViewPager связать TabLayout с ViewPager, вы должны установить вкладки текст либо с помощью метода SetText или в PagerAdapter после этого, и когда это произошло, метод onLayout вызывается в родительской ViewGroup (TabLayout), и это место, где можно установить параметр fontface. (Изменение текста TextView вызывает вызов метода onLayout его родительского элемента. TabView имеет двух дочерних элементов, один из них - ImageView другой - TextView)

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