2022-03-18
最近SpannableStringBuilderなるものを使ってテキストの大きさを部分的に変更できる
とを知ったので早速使ってみました。
SpannableStringBuilderとは、コード上に定義されているテキストを対象としたマークアップ
向けのオブジェクトぼこと。
htmlさながらにテキスト色を変更したりテキストをボタン化することができたりと割と万能な様子。
今回はある列番になったらテキストが変わるまでの一連の流れを紹介します。
SpannableStringBuilder sb = new SpannableStringBuilder(); sb.setSpan(new RelativeSizeSpan(1.2f), int, int, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
これだけ見ても分からないので一個ずつ説明。↓
一つ目の引数は、希望するテキストサイズを取っています。
二つ目の引数はテキスト変更の初め。テキストの見た目はここで指定した値から
始まります。
三つ目の引数はテキスト変更の終わり。ここで指定した値まで処理をします。
最後の引数はテキスト挿入時の振る舞い。フラグ指定。SPAN_EXCLUSIVE_EXCLUSIVEは定数です。
四つ指定してsetTextできればokです。
自分は元から定義してあったテキストを掘り出して再度加工したかったので
以下のようにした。文字数取得の為に配列使っちゃったりとやたら野放図な使い方
してるけどここでしか使わないため割愛。
java部分
</pre> @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_collection); TextView text = findById(this, R.id.title); SpannableStringBuilder sb; sb = textsizechange(text); text.setText(sb); } public SpannableStringBuilder textsizechange(TextView text){ String title = text.getText().toString(); String[] splitTitle = title.split("\n", 0); SpannableStringBuilder sb = new SpannableStringBuilder(); sb.append(text.getText().toString()); sb.setSpan(new RelativeSizeSpan(1.2f), splitTitle[0].length(), sb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return sb; } <pre>
xml部分
</pre> <pre><TextView android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="#fff" android:paddingBottom="10dp" android:paddingStart="20dp" android:paddingEnd="20dp" android:paddingTop="10dp" android:text="ようこそおいでなさりました!\nさあさごゆっくりとくつろいでくださいまし" android:gravity="center" android:textSize="16sp" android:textColor="#000" android:textStyle="bold" />
なお