Android HtmlCompatを使ってテキストの一部文字スタイルを変更する
HTMLタグを使ってスタイル付きのテキストにしてみる。
おなじみのHTMLなので一部文字変更やURLリンクにする方法はとても分かりやすいが
エスケープ文字を使わないといけないので、ぱっと見みにくい。。
一部だけ文字スタイルを変更するなどはSpannableも利用できるが、今回は使用しない。
strings.xmlで装飾
res/values/strings.xml
<p>太字<b> Android </b></p> <p>イタリック<i> Android </i></p> <p>アンダーライン<u> Android </u></p> <p>取り消し<del> Android </del></p> <p>リンク<a href="http://www.google.com"> Android </a> </p> <p>大きく<big> Android </big></p> <p>さらに大きく<big><big> Android </big></big></p> <p>小さく<small> Android </small></p> <p>文字色変更<font color="#11DDFF"> Android </font></p>
「Android」という文字列に対してイタリックにしたり、リンク付けたりしてる。
実際に記述するときはエスケープ処理する必要がある。
太字の例では以下のように記述する
<p>太字<b> Android </b></p> |
「<」は「<」の特殊文字でエスケープ処理しているのだが
まあ見にくい。ごちゃっとしてて嫌になる。
(これ以外の方法でうまくいくやり方見つけられず…)
HtmlCompatを使う
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_activity); TextView tv = findViewById(R.id.tv_id); tv.setText(HtmlCompat.fromHtml(getString(R.string.html_create), HtmlCompat.FROM_HTML_MODE_COMPACT)); tv.setMovementMethod(LinkMovementMethod.getInstance()); }
HtmlCompat.fromHtml(String source, int flags)
7行目にあるメソッドを利用し TextView に set するだけで
文字スタイルが違う複数行の文字列を表現することができる。
8行目にある TextView の設定は、リンクをタップできるようにしたもの。
tv.setMovementMethod(LinkMovementMethod.getInstance());
flagsの指定の違い
最初の例では
HtmlCompat.FROM_HTML_MODE_COMPACT
としたが、他にも複数flagがあり
HtmlCompat.FROM_HTML_MODE_LEGACY
とすると行間が空くようになる。
LEGACYだと行間空きすぎで、COMPACTは行間なさすぎ。
他のflagsでいい感じな行間を表現してくれるものは無いだろうか…
改行について
<p></p>で段落を表現していたが<br>で改行も可能である。
<br>を使う場合も「<br>」としてエスケープする必要がある。
通常の文字列での改行は「¥n」を利用する
ディスカッション
コメント一覧
まだ、コメントがありません