おもいっきりハマったのでメモ。
ButtonにSpannableStringBuilderを使って装飾したかったが、反映されなかった。
理由はこれ
SpannableString on button not works for API21?
以下のように対応しました。
(該当の箇所に取り消し線を引きたかった)
ButtonExtension.kt
object ButtonExtension {
@BindingAdapter("setStrike")
@JvmStatic
fun Button.setStrike(strikeText: String) {
this.setAllCaps(false) // ← これがないと反映されない
val spannableStringBuilder = SpannableStringBuilder(this.text)
val start = this.text.indexOf(strikeText)
val end = start + strikeText.length
spannableStringBuilder.setSpan(StrikethroughSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
this.text = spannableStringBuilder
}
}
こうしておくと、XML側で
XML
<Button
//...
app:setStrike="hoge" />
と書くだけでOKです。
わざわざ textAllCaps="false"
を書く必要はありません。