Android font size for tabs

I ask this quest a few years ago, but I have no solutions :( my problem is that I have an Android application with tab activity, where I need to set the font size of my tabs, but I don’t know how to do it.

in my activity I programmatically set my tabs:

TabLayout tabLayout = (TabLayout) findViewById(R.id.tab_layout); tabLayout.addTab(tabLayout.newTab().setText("MY TAB 1")); tabLayout.addTab(tabLayout.newTab().setText("MY TAB 2")); tabLayout.addTab(tabLayout.newTab().setText("MY TAB 3")); tabLayout.setTabGravity(TabLayout.GRAVITY_FILL); 

The problem is that the last 1 - 2 letters will be cut out, so I have to set the font size smaller, but how?

Hope someone can help me.

+4
android tabs
Dec 09 '15 at 7:31
source share
7 answers

Enter these codes below 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 as below.

 <android.support.design.widget.TabLayout style="@style/MyTabLayout" android:layout_width="width" android:layout_height="height"/> 
+25
Dec 09 '15 at 7:54
source share

try it

Create an XML layout called 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 the text size programmatically as shown below.

 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); 
+2
Nov 07 '17 at 9:59 on
source share
 #If you dont want to use style.xml and do by prgramatically the Use this in your xml layout. # <android.support.design.widget.TabLayout android:id="@+id/tab_Layout_dashboard" android:layout_below="@id/ll_profile" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.15" style="@style/Base.Widget.Design.TabLayout" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" /> <android.support.v4.view.ViewPager android:layout_below="@id/tab_Layout_dashboard" android:id="@+id/pager_tutor" android:layout_width="match_parent" android:layout_height="0dp" android:layout_weight="0.85" /> #In your activity or fragment use this method# private void changeTabsFont() { Typeface font = Typeface.createFromAsset(getActivity().getAssets(), "fonts/"+ Constants.FontStyle); ViewGroup vg = (ViewGroup) tab_layout.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(font); ((TextView) tabViewChild).setTextSize(15); } } } } 

This code works for Tablayout to change text color, face type (font style), and text size. IF this works for you, then do the right thing so that the other user can easily solve their problem.

+1
Apr 01 '17 at 11:40 on
source share

also try:

 <style name="MyCustomTabText" parent="TextAppearance.Design.Tab"> <item name="android:textSize">14sp</item> <item name="android:textColor">?android:textColorSecondary</item> <item name="textAllCaps">false</item> </style> <android.support.design.widget.TabLayout android:id="@+id/tabs" app:tabTextAppearance="@style/MyCustomTabText" android:layout_width="match_parent" android:layout_height="wrap_content" /> 
0
Jun. 09 '18 at 9:45
source share

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 according to 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"); } } 
0
Feb 22 '19 at 6:57
source share

if you set text_size directly in the style of the tab layout, this will not work !! You must set it to a style that 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 the full style for the 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> 
0
May 10 '19 at 2:04
source share

I have done the following:

Create an entry in attrs.xml like this

 <resources> <declare-styleable name="SegmentedTabLayout"> <attr name="fontSize" format="dimension" /> </declare-styleable> </resources> 

Then create a font size property and initialize the method that you will call in the constructor as follows

 public float FontSize { get; set; } private void InitializeAttrs(Context context, IAttributeSet attrs) { if (context == null || attrs == null) return; var styleAttributes = context.ObtainStyledAttributes(attrs, Resource.Styleable.SegmentedTabLayout); if (styleAttributes == null) return; FontSize = styleAttributes.GetDimension(Resource.Styleable.SegmentedTabLayout_fontSize, -1); styleAttributes.Recycle(); } 

Then I used the viral 9966 method (improved it a bit) and called it in the NewTab override method as follows

 public override Tab NewTab() { var tab = base.NewTab(); ChangeFontSize(tab); return tab; } private void ChangeFontSize(Tab tab) { if (FontSize < 0) return; var tabViewGroup = (ViewGroup)tab.View; for (int i = 0; i < tabViewGroup.ChildCount; i++) { if (tabViewGroup.GetChildAt(i) is TextView textView) { textView.TextSize = FontSize; } } } 

And this is it :)

0
May 14 '19 at 5:53 a.m.
source share



All Articles