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

时间:2016-11-30 11:35:34

标签: android android-tablayout text-size

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

enter image description here

我尝试过使用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);

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

3 个答案:

答案 0 :(得分:6)

TabLayoutTextView的默认样式使用TextAppearancetextAllCaps属性设置为true。其转换方法将CharSequence处理为展平String,因此任何Spannable信息都会丢失。

为防止这种情况发生,我们可以为TabLayout创建一个禁用textAllCaps的样式。例如:

<style name="TabTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="textAllCaps">false</item>
</style>

将此设置为tabTextAppearance上的TabLayout,可让您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" />

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

答案 1 :(得分:1)

另一种方法是将SpannableString文本用于TabLayout:

@Override
    public CharSequence getPageTitle(int position) {
        // Generate title based on item position
        SpannableString sb = new SpannableString( tabTitles[position]);
        sb.setSpan(new RelativeSizeSpan(2f), 0,5, 0); // set size
        sb.setSpan(new ForegroundColorSpan(Color.RED), 0, 5, 0);// set color

        return sb;
    }

有关更多信息,请检查Add Icons+Text to TabLayout

答案 2 :(得分:0)

Mike M.答案的补充

我也遇到了同样的问题,但只有在棒棒糖和倒退中,在奥利奥(Oreo)中它工作得很好,然后才被样式化,幸运的是迈克的答案解决了它。

我正在使用Google Material TabLayout

<com.google.android.material.tabs.TabLayout
        android:id="@+id/tabs"
        app:tabTextAppearance="@style/TabTextAppearance"
        android:background="@color/colorDarkGreen"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:tabMaxWidth="0dp"
        app:tabGravity="fill"
        app:tabMode="fixed"
        app:tabBackground="@drawable/tab_color_selector_green">

</com.google.android.material.tabs.TabLayout>

至少,如果您正在为Oreo等公司工作,则不必使用此小部件来放置样式。