Android SpannableStringBuilderを使って文字を装飾してみる

2019年9月21日

前回、文字列の一部を加工するのに
HtmlCompatクラス を使ったが、今回は
SpannableStringBuilderクラス などを使って
文字の一部を変えてみる

Setした文字列の一部を大きくする

SpannableStringBuilderクラスを使って
文字列の一部の「元気」
という文字サイズを1.5倍にする

String hello = getString(R.string.hello_message); // こんちは、元気かい?
String genki = "元気";

// 「元気」文字列が何番目に位置するか
int startIndex = hello.indexOf(genki);
int endIndex = startIndex + genki.length();

SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder();
spannableStringBuilder.append(hello);
spannableStringBuilder.setSpan(
        new RelativeSizeSpan(1.5f),
        startIndex,
        endIndex,
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
);

TextView tv = findViewById(R.id.tv_id);
tv.setText(spannableStringBuilder);

追加した文字列を大きくする

SpannableStringBuilderクラス の append メソッドを使って
文字を追加すると同時に大きくしてみる

追加文字は「元気だよ!」の改行入り

String hello = getString(R.string.hello_message); // こんちは、元気かい?
String genkiDayo = "¥n元気だよ!";

SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(hello);
spannableStringBuilder.append(
        genkiDayo,
        new RelativeSizeSpan(2.0f),
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
);

TextView tv = findViewById(R.id.tv_id);
tv.setText(spannableStringBuilder);

文字列が不変の場合

文字列が不変なら SpannableStringクラス を使える
今回は、 「元気」という文字サイズを半分にする

String hello = getString(R.string.hello_message); // こんちは、元気かい?
String genki = "元気";

int startIndex = hello.indexOf(genki); // 5番目
int endIndex = startIndex + genki.length(); // 7番目

SpannableString string = new SpannableString(getString(R.string.hello_message));
string.setSpan(
        new RelativeSizeSpan(0.5f),
        startIndex,
        endIndex,
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView tv = findViewById(R.id.tv_id);
tv.setText(string);

開発日記

Posted by konp