2016-11-30 7 views
5

Я хочу установить заголовок TabLayout с двумя разными размерами текста. Как и данное изображение ниже. Или наоборот, чтобы достичь этого!Есть ли способ использовать SpannableString в 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() не принимает богатое содержание!

+0

Возможно, вы можете использовать fromHtml() –

+0

Используйте Html.fromHtml(), или если он не работает, создайте пользовательский макет для вкладки. –

+0

@SahilMunjal Html.fromHtml() не повезло с этим! –

ответ

6

TabLayout «s стиль по умолчанию для его 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 для вкладок является еще одним вариантом здесь, так что не будет иметь проблемный атрибут настройки по умолчанию.

 Смежные вопросы

  • Нет связанных вопросов^_^