はじめに
Android の TextView では View サイズに応じて、
文字の大きさ(TextSize)を自動的に調整する機能が実装されています。
その機能について調べたので、簡単に使い方をまとめたいと思います。
View サイズに応じて TextSize を自動的に調整する
次のように TextView の autoSizeTextType を uniform に設定すると、
TextView の View サイズに応じて TextSize が自動的に調整されるようになります。
<TextView
android:id="@+id/size_type_uniform_view"
android:layout_width="match_parent"
android:layout_height="1dp"
android:text="Uniform"
android:background="#aaffaa"
app:autoSizeTextType="uniform"/>
次のような感じで View サイズの変化に応じて TextSize を自動的に調整してくれます。
TextSize を大きくするステップ数の調整をする
次のように autoSizeStepGranularity を設定すると、
TextSize を大きくするステップ数の調整ができます。
<TextView
android:id="@+id/granularity_view"
android:layout_width="match_parent"
android:layout_height="1dp"
android:text="Granularity"
android:background="#aaffaa"
app:autoSizeTextType="uniform"
app:autoSizeStepGranularity="10dp"/>
次のような感じで TextSize を徐々に大きくするのではなく段階的に大きくしてくれます。
TextSize の最小値と最大値を調整する
次のように autoSizeMinTextSize と autoSizeMaxTextSize を設定すると、
View サイズに応じて調整される TextSize の最小値と最大値を調整できます。
<TextView
android:id="@+id/min_max_view"
android:layout_width="match_parent"
android:layout_height="1dp"
android:text="MinMax"
android:background="#ffaaaa"
app:autoSizeTextType="uniform"
app:autoSizeMinTextSize="25dp"
app:autoSizeMaxTextSize="75dp"/>
次のような感じで、ある View サイズよりも小さくなったら TextSize が小さくならず
ある View サイズよりも大きくなったら TextSize を大きくしないようにできます。
プリセットで ステップ数、最小値、最大値を定義する
autoSizeStepGranularity や autoSizeMinTextSize 、autoSizeMaxTextSize を
設定すればTextSize をどのように大きさを調整するか大まかに設定できました。
もっと詳細に調整したい場合は autoSizePresetSizes を利用します。
次のような配列(プリセット)を渡すと、TextSize をそのステップ数、最小値、最大値で調整してくれます。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<array name="autosize_text_sizes">
<item>10dp</item>
<item>50dp</item>
<item>100dp</item>
</array>
</resources>
<TextView
android:id="@+id/size_preset_sizes_view"
android:layout_width="match_parent"
android:layout_height="1dp"
android:text="PresetSizes"
android:background="#aaaaff"
app:autoSizeTextType="uniform"
app:autoSizePresetSizes="@array/autosize_text_sizes"/>
次のような感じでプリセットのステップ数、最小値、最大値となるよう TextSize を調整してくれます。
おわりに
TextView の文字の大きさを自動的に調整したいときは、
次の attributes にて どのように自動的に調整するか設定できる。
attributes | 説明 |
---|---|
autoSizeTextType | uniform であれば自動的に調整する。 none であれば自動的に調整しない。 |
autoSizeStepGranularity | 自動的に調整する際の TextSize を大きくするステップ数を設定する。 |
autoSizeMinTextSize | 自動的に調整する際の TextSize の最小値を設定する。 |
autoSizeMaxTextSize | 自動的に調整する際の TextSize の最大値を設定する。 |
app:autoSizePresetSizes | 自動的に調整する際の プリセット を設定する。 プリセットに定義した内容で ステップ数、最小値、最大値が決まる |