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

时间:2015-03-12 10:50:52

标签: android button android-5.0-lollipop spannable

我有一个简单的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的东西。

1 个答案:

答案 0 :(得分:80)

默认情况下,“材质”按钮的样式设置为以全部大写字母显示文本。但是,用于大写的AllCapsTransformationMethod存在导致其丢弃Spannable数据的错误。

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

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