Кнопка setText с Spannable не работает для Android 5.0 Lollipop

У меня есть простой Button:

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

и попытайтесь изменить свойство текста:

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

Он работает на Android 4.3, но не на 5.0.

Интересно, когда я меняю реализацию с Button на TextView, она отлично работает на 5.0. Кажется, что-то с Button в Lollipop.

Ответ 1

По умолчанию кнопки "Материал" стилизованы для отображения текста во всех шапках. Однако в AllCapsTransformationMethod есть ошибка, используемая для капитализации, которая заставляет ее отказаться от данных Spannable.

Вы можете переопределить стиль кнопки по умолчанию и отключить все шапки, указав android:textAllCaps="false" на Button.

<Button
    ...
    android:textAllCaps="false" />