我想用两种不同的文字大小设置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);
但正如CommonaSware所提到的那样 setText()并没有采用丰富的内容!
答案 0 :(得分:6)
TabLayout
其TextView
的默认样式使用TextAppearance
,textAllCaps
属性设置为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等公司工作,则不必使用此小部件来放置样式。