web-dev-qa-db-ja.com

Spannableを使用したボタンsetTextは、Android 5.0Lollipopでは機能しません

私は単純な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のようなもののようです。

23
klimat

デフォルトでは、マテリアルボタンはすべて大文字でテキストを表示するようにスタイル設定されています。ただし、大文字の使用に使用されるAllCapsTransformationMethodにはバグがあり、Spannableデータが破棄されます。

ButtonAndroid:textAllCaps="false"を指定することで、デフォルトのボタンスタイルを上書きし、すべて大文字を無効にすることができます。

<Button
    ...
    Android:textAllCaps="false" />
83
alanv