TextViewの一部の文字色を変更する

TextViewの文字列にHTMLタグが使えるのを知らなかったのでメモ。

今日も仕事で半分徹夜。そろそろ…

このように、文の一部分だけを赤色にしたいとする。ぱっと見全然難しいプログラムではなさそうだけど、実際にTextViewで実現しようとしたらちょっと迷った。

一番始めに思いついたのは、同色の文字毎にTextViewを作り横に並べれるという方法。1行に収まるならこれで良さそうだけど、複数行になる場合、自然な改行処理をするのがすごい面倒臭そうということで断念。 じゃあ、独自Viewを作ってdrawメソッド内にテキスト描画処理を組み込むか、と考えたけどこちらもむろんTextViewを使うだけの場合より相当面倒くさい。

こんな時に便利なのが、android.text.HtmlのfromHtmlメソッド。

HTMLタグを使えるので、以下のようにHTML文書を作成する感覚で手軽に文字修飾が出来てしまう。

textView.setText(Html.fromHtml(“今日も仕事で<font color=\”red\”> 半分徹夜</font>そろそろ…”));

さらに感動したのはbタグも使える事。 Androidの場合、機種によってはTextViewの日本語BOLD修飾が対応していない。 こういったケースの場合、いつもは苦肉の策としてPaintを使って文字淵を描いたり、TextViewのシャドウ機能を使って影を重ねて文字を太く見せたりしたけどHtml.fromHtmlを使えば、単純にbタグを使えばOKのよう。

これは非常に便利だ。 HTML5の時代にfontタグで文字修飾をするなんて相当なルール違反だろうけど、、まあ、TextViewはHTML文書ではないからいいよね?



コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>