今天接到公司一个项目任务,是一个TabLayout与ViewPager联动的效果,并且TabLayot中的文字是单行跑马灯效果。
做好TabLayout和ViewPager后,我就去实现字体效果。但是TabLayout的文字部分效果是:当文字长度超出边框长度时,它会自动换成两行,当两行都显示不下时,它才会把后面看不到的部分变成省略号。我翻看TabLayou的底层代码,发现TabLayout中将maxlinedefaultMaxLines设为2。于是,我想通过反射获取到它的maxlinedefaultMaxLines值并做修改,又发现maxlinedefaultMaxLines所在的类是一个final类。
底层源码:
public final class TabView extends LinearLayout {
private Tab tab;
private TextView textView;
private ImageView iconView;
@Nullable private View badgeAnchorView;
@Nullable private BadgeDrawable badgeDrawable;
@Nullable private View customView;
@Nullable private TextView customTextView;
@Nullable private ImageView customIconView;
@Nullable private Drawable baseBackgroundDrawable;
private int defaultMaxLines = 2;
……
}
至此,结论就出来了,当你的文字过长时,并想显示为单行时(也并非完全不可以,你可以在xml文件中设置TabLayout的属性值 app:tabMode="scrollable",它的效果是单行,但当文字过长时,是不会省略的,并且会把其他Tab出去) TabLayout无法实现单行将文字多余部分变为省略号的效果,包括它的TextView样式都是无法改变的。