LoginSignup
2
0

More than 5 years have passed since last update.

ButtonはtextAllCaps="false"しないとSpannableStringBuilderが適用されない

Posted at

おもいっきりハマったのでメモ。

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" を書く必要はありません。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0