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>
已测...