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

kli*_*mat 22 android button 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" />
Run Code Online (Sandbox Code Playgroud)

并尝试通过以下方式更改文本属性:

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

它适用于Android 4.3但不适用于5.0.

有趣的是,当我将实现更改ButtonTextView5.0时,它可以正常工作.似乎是Button棒棒糖的东西.

ala*_*anv 81

默认情况下,"材质"按钮的样式设置为以全部大写形式显示文本.但是,AllCapsTransformationMethod用于大写的错误导致它丢弃Spannable数据.

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

<Button
    ...
    android:textAllCaps="false" />
Run Code Online (Sandbox Code Playgroud)

  • Android的另一个重要时刻......当你将setAllCaps设置为true的TextView时,Spannables会停止工作.在我的例子中是ForegroundColorSpannable.谢谢你的答案. (22认同)