android font size of tabs

if you set text_size directly in style of tab layout, it doesn't work!! you have to set it into a style which has parent="@android:style/TextAppearance.Widget.TabWidget"

<style name="tab_text" parent="@android:style/TextAppearance.Widget.TabWidget">
    <item name="android:fontFamily">@fonts/iransans_b</item>
    <item name="android:textSize">@dimen/textSize_Large</item>
    <item name="textAllCaps">false</item>
</style>

<style name="Tab" parent="Widget.Design.TabLayout">
    <item name="tabTextAppearance">@style/tab_text</item>
</style>


 <com.google.android.material.tabs.TabLayout
                 android:id="@+id/item_tabs"
                 android:layout_width="match_parent"
                 android:layout_height="@dimen/margin_dp_65"
                 style="@style/Tab"/>

and also this is a full style for tab:

 <style name="Tab_WithBackground" parent="Widget.Design.TabLayout">
    <item name="tabSelectedTextColor">@color/purple</item>
    <item name="tabTextColor">@drawable/tab_text_color</item>
    <item name="tabIndicatorColor">@color/white</item>
    <item name="tabGravity">fill</item>
    <item name="tabIndicatorHeight">4dp</item>
    <item name="android:tabStripEnabled">true</item>
    <item name="android:padding">0dp</item>
    <item name="tabMaxWidth">0dp</item>
    <item name="android:minHeight">@dimen/margin_dp_80</item>
    <item name="tabTextAppearance">@style/tab_text</item>
</style>

Write these below codes in styles.xml

<style name="MyTabLayout" parent="Base.Widget.Design.TabLayout">
        <item name="tabTextAppearance">@style/MyTabTextAppearance</item>
</style>

<style name="MyTabTextAppearance" parent="TextAppearance.AppCompat.Button">
        <item name="android:textSize">18sp</item>
        <item name="android:textColor">@android:color/white</item>
        <item name="textAllCaps">true</item>
</style>

And in your tablayout, set the style like below.

<android.support.design.widget.TabLayout
     style="@style/MyTabLayout"
     android:layout_width="width"
     android:layout_height="height"/>

try this

Create an xml layout named custom_tab.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/tab"
android:textColor="@color/colorAccent"/>

than in your activity set text size programaticlly like below code

TextView tabOne = (TextView) 
LayoutInflater.from(this).inflate(R.layout.custom_tab, null);
tabOne.setText("ONE");
tabOne.setTextSize(14); // set font size as per your requirement 
tabLayout.getTabAt(0).setCustomView(tabOne);

If you want to change the font size programmatically, you can use java reflection to access the integer field tabTextSize in the TabLayout class and set the font size as per your requirement.

public static void updateTabLayoutFontSize(TabLayout tabLayout, int textSizeInPixel) {
  try {
     Field mCursorDrawableRes = TabLayout.class.getDeclaredField("tabTextSize");
     mCursorDrawableRes.setAccessible(true);
     mCursorDrawableRes.set(tabLayout, textSizeInPixel);
  } catch (Exception e) {
    Log.d("TAG1", "Failed to update tablayout font using reflection");
  }
}

Tags:

Android

Tabs