Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Button setText with Spannable doesn't work for Android 5.0 Lollipop

I have a simple Button:

<Button     android:id="@+id/test"     android:textColor="@color/white"     android:layout_width="wrap_content"     android:layout_height="wrap_content" /> 

and try to change text property by:

SpannableString span = new SpannableString(text); span.setSpan(new AbsoluteSizeSpan(8, true), 5, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); testButton.setText(span); 

It works on Android 4.3 but doesn't on 5.0.

The interesting thing is when I change implementation from Button to TextView it works fine on 5.0. Seems to be something with Button in Lollipop.

like image 773
klimat Avatar asked Mar 12 '15 10:03

klimat


1 Answers

By default, Material buttons are styled to show text in all-caps. However, there is a bug in the AllCapsTransformationMethod used for capitalization that causes it to discard Spannable data.

You can override the default button styling and disable all-caps by specifying android:textAllCaps="false" on your Button.

<Button     ...     android:textAllCaps="false" /> 
like image 119
alanv Avatar answered Sep 28 '22 16:09

alanv