2016-11-30 13 views
5

Chcę ustawić tytuł TabLayout z dwoma różnymi rozmiarami tekstu. Podobnie jak podany obrazek poniżej. Lub na odwrót, aby to osiągnąć!jest jakiś sposób na użycie SpannableString w TabLayout?

enter image description here

Próbowałem z SpannableString lubią dać poniżej. Ten fragment jest w pętli for do 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); 

Ale jak wspomniano przez CommonaSware setText() nie bierze bogatą zawartość!

+0

Możliwe, że można zrobić z fromHtml() –

+0

Użyj Html.fromHtml() lub jeśli to nie działa, a następnie utwórz niestandardowy układ dla karty. –

+0

@SahilMunjal Html.fromHtml() bez powodzenia z tym też! –

Odpowiedz

6

TabLayout „s domyślny styl dla swoich TextView s wykorzystuje TextAppearance z atrybutem textAllCaps ustawiony true. Metodą transformacji dla tej obsługi jest CharSequence jako płaski String, więc wszelkie informacje o numerze Spannable zostaną utracone.

Aby temu zapobiec, możemy utworzyć styl dla TabLayout, który wyłącza textAllCaps. Na przykład:

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

Ustawienie to jako tabTextAppearance na TabLayout pozwoli na SpannableString działać zgodnie z oczekiwaniami.

<android.support.design.widget.TabLayout 
    android:id="@+id/tab_layout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    app:tabTextAppearance="@style/TabTextAppearance" /> 

Jak wspomniano w komentarzach, stosując niestandardowe View na kartach ma innej opcji tutaj, ponieważ nie miałby problematyczny atrybut ustawienie domyślne.

Powiązane problemy