是否有任何方法在TabLayout中使用SpannableString?

and*_*ann 5 android text-size android-tablayout

我想用两种不同的文字大小设置TabLayout的标题.如下图所示.或者反过来实现这一目标!

在此输入图像描述

我尝试过使用SpannableString,如下所示.这个代码片段在for循环中直到5!

SpannableString mSpannableString=  new SpannableString(s);
mSpannableString.setSpan(new RelativeSizeSpan(2f), 0,5, 0); // set size
mSpannableString.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);// set color
mTabLayout.getTabAt(i).setText(mSpannableString);
Run Code Online (Sandbox Code Playgroud)

但正如CommonaSware所提到的,setText()并没有采用丰富的内容!

Mik*_* M. 6

TabLayout其的默认样式TextViewS采用一个TextAppearancetextAllCaps设置属性true.这种转换方法处理CharSequence为平面String,因此任何Spannable信息都会丢失.

为了防止这种情况,我们可以为TabLayout禁用它创建一个样式textAllCaps.例如:

<style name="TabTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="textAllCaps">false</item>
</style>
Run Code Online (Sandbox Code Playgroud)

设置此作为tabTextAppearanceTabLayout将允许你SpannableString以正常工作.

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    app:tabTextAppearance="@style/TabTextAppearance" />
Run Code Online (Sandbox Code Playgroud)

正如评论中所提到的,使用View选项卡的自定义是另一种选择,因为默认情况下不会出现有问题的属性设置.