こんにちは、 id:numanuma08 です。今回もAndroidの小ネタです。
AndroidでTextView等に文字列を装飾して表示する場合、SppanableStringを利用します。また、SppanableStringを生成するために、SpannableStringBuilderもまた利用されます。
今回は、SpannableStringBuilderのkotlin拡張を利用した簡単な文字列の装飾を紹介します。
androidx.core:core-ktx
にbuildSpannedString
を使うと簡単に文字列の装飾を実現できます。
この関数はパラメータにSpannableStringBuilderを引数とする無名関数を取ります。SpannableStringBuilderもkotlin拡張メソッドが用意されているので、宣言的に文字列の装飾が実現できます。以下、サンプルです。
binding.text = buildSpannedString { underline { append("Hello ") color(getColor(android.R.color.holo_red_dark)) { append("World") } append(" ") inSpans(AbsoluteSizeSpan(30, true)) { append("Welcome") } } }
実行するとこんな感じ。
kotlin拡張メソッドによって宣言的な文字列装飾を実装できました。よく利用すると思われる文字の色やアンダーライン、太字などは最初から拡張メソッドが提供されているのでそれを利用できます。拡張メソッドが提供されていないものでも、inSpan
を使えば好きな装飾を適応できます。パラメーターに渡した無名関数の中でappend
された文字列が装飾されるので、どこでappendされているかを把握すればどの装飾が適応されるのかも一目瞭然ですね。
以上、SppanableStringBuilderのkotlin拡張で文字列装飾を簡単に行う方法でした。