Như Andrei đã trả lời, bạn có thể thay đổi phông chữ bằng cách mở rộng lớp TabLayout . Và như Penzzz đã nói, bạn không thể làm điều đó trong phương thức addTab . Ghi đè phương thức onLayout như bên dưới:
@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);
}
}
}
}
Phải ghi đè phương thức onLayout, bởi vì, khi bạn sử dụng phương thức setupWithViewPager để liên kết TabLayout với ViewPager, bạn phải đặt văn bản tab bằng phương thức setText hoặc trong PagerAdapter sau đó và khi điều này xảy ra, phương thức onLayout được gọi trên ViewGroup mẹ ( TabLayout) và đó là nơi để đặt fontface thiết lập. (Thay đổi văn bản TextView gây ra việc gọi phương thức onLayout của nó là cha - Một tabView có hai con, một là ImageView, một là TextView)
Giải pháp khác:
Đầu tiên, những dòng mã sau:
if(fontFace == null){
fontFace = Typeface.createFromAsset(context.getAssets(), context.getString(R.string.IranSans));
}
Trong giải pháp trên, nên được viết bên ngoài hai vòng lặp.
Nhưng giải pháp tốt hơn cho API> = 16 là sử dụng android: fontFamily :
Tạo một phông chữ có tên trong Thư mục tài nguyên Android và sao chép phông chữ mong muốn của bạn vào thư mục.
Sau đó, sử dụng các kiểu sau:
<style name="tabLayoutTitles">
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/appFirstFontSize</item>
<item name="android:fontFamily">@font/vazir_bold</item>
</style>
<style name="defaultTabLayout">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/defaultTabLayoutHeight</item>
<item name="android:gravity">right</item>
<item name="tabTextAppearance">@style/tabLayoutTitles</item>
<item name="tabSelectedTextColor">@color/white</item>
<item name="tabIndicatorColor">@color/white</item>
<item name="tabIndicatorHeight">@dimen/accomTabIndicatorHeight</item>
<item name="tabMode">fixed</item>
<item name="tabGravity">fill</item>
<item name="tabBackground">@drawable/rectangle_white_ripple</item>
<item name="android:background">@color/colorPrimary</item>
</style>