google 原生控件TabLayout 文字单行显示

类似于上面的图中,文字过长的,如果不做处理的话,其实是会两行显示,看源码,默认的最大行数是2

 

所以直接用反射,修改这个变量

val tab = tab_layout.newTab().setText("哈哈")
try {
     // 单行显示
     val view = tab.view
     val clas = view.javaClass
     val field = clas.getDeclaredField("defaultMaxLines")
     field.isAccessible = true
     field.setInt(view, 1)
} catch (e: Exception) {}
tab_layout.addTab(tab)

在添加tab的时候去修改这个字段,最重要的还得设置最大的宽度

app:tabMaxWidth="100dp"

以下是我的有关xml代码

    <com.google.android.material.tabs.TabLayout
            android:id="@+id/tab_layout"
            app:tabMode="scrollable"
            app:tabIndicatorGravity="top"
            app:tabIndicatorFullWidth="false"
            app:tabMaxWidth="100dp"
            app:tabIndicator="@drawable/common_tab_indicator"
            app:tabIndicatorColor="@color/color_22C05E"
            app:tabTextColor="@color/color_484848"
            app:tabSelectedTextColor="@color/color_22C05E"
            app:tabTextAppearance="@style/CommonTabTextStyle"
            app:tabRippleColor="@android:color/transparent"
            app:tabBackground="@android:color/transparent"
            android:layout_width="match_parent"
            android:layout_height="44dp"/>
common_tab_indicator
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item
            android:width="30dp"
            android:height="4dp"
            android:gravity="center">
        <shape>
            <corners android:radius="2dp" />
            <!--color无效,源码用tabIndicatorColor-->
            <solid android:color="@color/colorPrimary" />
        </shape>
    </item>
</layer-list>
CommonTabTextStyle
    <style name="CommonTabTextStyle" >
        <item name="android:textSize">16sp</item>
        <item name="android:textStyle">normal</item>
        <item name="android:textColor">@color/color_484848</item>
        <item name="android:ellipsize">end</item>
        <item name="android:singleLine">true</item>
    </style>

已测...