TextViewにはHTMLが使える
TextViewのtextには、一部のHTMLタグが使えるので、それを利用します。
strings.xml
<resources>
<string name="sample_text">文字列の<font color=\"#00BBEE\">ここだけ</font>色を変える<br>改行もbrタグを使う必要があるので注意</string>
</resources>
このとき改行は、\nではなく、<br>で行う必要があるのですが、つい\nを使ってしまって、改行してねーというミスをやりがちなので注意しましょう。
コードで文字列を設定するとき
これをレイアウトリソースで使うときは、@string/sample_textで指定してやれば、そのまま使えるのですが、コード内で設定するときは一手間かかります。
textView.setText(getString(R.string.sample_text));
これだと、TextViewはHTMLであると解釈してくれないので、
textView.setText(Html.fromHtml(getString(R.string.sample_text)));
としてあげる必要があります。
動的に色を変える
getString()の第2引数移行を使って、文字列リソースに値を埋め込めるので、コードで色を変えたりすることもできます。
strings.xml
<resources>
<string name="sample_text">文字列の<font color=\"#%1$s\">ここだけ</font>色を変える<br>改行もbrタグを使う必要があるので注意</string>
</resources>
文字列リソースの方では、fontタグのcolor属性の部分を%1$sとして値を埋め込むようにしておきます。
String color = String.format("%08x", 出したい色);
color = color.substring(2);
textView.setText(Html.fromHtml(getString(R.string.sample_text, color));
コードで実際の色を埋め込んだ文字列を使用します。
Androidでは(Javaでは?)最上位の8bitをアルファ値として使用しているので、色の値を16進数の文字列にするとマットな色の場合、先頭にffがついて8文字になります。
HTMLとしては、アルファ値を含んだ色指定を想定していないので、先頭の2文字を切ってあげないとcolor属性が反映されません。ちょっとめんどくさいです。