带 Spannable 的按钮 setText 不适用于 Android 5.0 Lollipop

Button setText with Spannable doesn't work for 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 上运行良好。好像是 Lollipop 里带 Button 的东西。

默认情况下,Material 按钮的样式设置为全部大写显示文本。但是,用于大写的 AllCapsTransformationMethod 中存在一个错误,导致它丢弃 Spannable 数据。

您可以通过在 Button 上指定 android:textAllCaps="false" 来覆盖默认按钮样式并禁用全部大写。

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