Android 8.0(API レベル 26)以上では、テキストサイズを自動的に拡大または縮小し、TextView
の特性と境界に基づいてレイアウトを埋めるよう TextView
に指示できます。このように設定すると、動的コンテンツを表示するさまざまな画面で、テキストサイズの最適化が容易になります。
サポート ライブラリ 26.0 は、Android 8.0(API レベル 26)より前のバージョンの Android を搭載したデバイスで、TextView
の自動サイズ調整機能を完全にサポートします。このライブラリは、Android 4.0(API レベル 14)以上をサポートします。android.support.v4.widget
パッケージには、下位互換性のある方法で機能にアクセスする TextViewCompat
クラスが含まれています。
TextView の自動サイズ調整の設定
フレームワークまたはサポート ライブラリのいずれかを使用して、プログラムまたは XML で TextView
の自動サイズ調整を設定できます。XML 属性を設定するには、Android Studio の [Properties] ウィンドウも利用できます。
TextView
の自動サイズ調整を設定するには、以下の 3 つの方法があります。
注: XML ファイルで自動サイズ調整を設定する場合、TextView
の layout_width
属性または layout_height
属性に値「wrap_content」を使用することはおすすめしません。そのようにすると、予期しない結果が発生する可能性があります。
デフォルト
デフォルト設定では、TextView
の自動サイズ調整により、横軸と縦軸で均一に拡大縮小が行われます。
- デフォルト設定をプログラムで定義するには、
setAutoSizeTextTypeWithDefaults(int autoSizeTextType)
メソッドを呼び出します。AUTO_SIZE_TEXT_TYPE_NONE
を指定して自動サイズ調整機能をオフにするか、AUTO_SIZE_TEXT_TYPE_UNIFORM
を指定して横軸と縦軸で均一に拡大縮小します。 - XML でデフォルト設定を定義するには、
android
名前空間を使用し、autoSizeTextType
属性を none または uniform に設定します。
注: 均一な拡大縮小のデフォルトのディメンションは、minTextSize = 12sp
、maxTextSize = 112sp
、granularity = 1px.
です。
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" />
サポート ライブラリの使用
- サポート ライブラリを介してプログラムでデフォルト設定を定義するには、
TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType)
メソッドを呼び出します。TextView
ウィジェットのインスタンスと、TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE
やTextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM
などのテキストタイプのいずれかを指定します。 - サポート ライブラリを介して XML でデフォルト設定を定義するには、
app
名前空間を使用し、autoSizeTextType
属性を none または uniform に設定します。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="200dp" app:autoSizeTextType="uniform" /> </LinearLayout>
粒度
最小と最大のテキストサイズ範囲と、各ステップのサイズを指定するディメンションを定義できます。TextView
は、最小サイズ属性と最大サイズ属性の範囲内で均一に拡大縮小します。各増分は、粒度属性で設定されたステップサイズに従って生成されます。
- テキストサイズの範囲とディメンションをプログラムで定義するには、
setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
メソッドを呼び出します。最大値、最小値、粒度値、任意のTypedValue
ディメンション単位を指定します。 - XML でテキストサイズの範囲とディメンションを定義するには、
android
名前空間を使用し、次の属性を設定します。autoSizeText
属性を none または uniform に設定します。none はデフォルト値です。uniform を設定すると、TextView
が横軸と縦軸で均一に拡大縮小されます。autoSizeMinTextSize
属性、autoSizeMaxTextSize
属性、autoSizeStepGranularity
属性を設定して、TextView
の自動サイズ調整のディメンションを定義します。
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" android:autoSizeMinTextSize="12sp" android:autoSizeMaxTextSize="100sp" android:autoSizeStepGranularity="2sp" />
サポート ライブラリの使用
- サポート ライブラリを介してプログラムでテキストサイズの範囲とディメンションを定義するには、
TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit)
メソッドを呼び出します。最大値、最小値、粒度値、任意のTypedValue
ディメンション単位を指定します。 - サポート ライブラリを介して XML でテキストサイズの範囲とディメンションを定義するには、
app
名前空間を使用し、レイアウト XML ファイルでautoSizeText
属性、autoSizeMinTextSize
属性、autoSizeMaxTextSize
属性、autoSizeStepGranularity
属性を設定します。
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="200dp" app:autoSizeTextType="uniform" app:autoSizeMinTextSize="12sp" app:autoSizeMaxTextSize="100sp" app:autoSizeStepGranularity="2sp" /> </LinearLayout>
プリセット サイズ
プリセット サイズでは、テキストの自動サイズ調整時に TextView
が選択するすべての値を指定できます。
-
プリセット サイズを使用してプログラムで
TextView
の自動サイズ調整を設定するには、setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit)
メソッドを呼び出します。サイズの配列と、サイズの任意のTypedValue
ディメンション単位を指定します。 -
プリセット サイズを使用して XML で
TextView
の自動サイズ調整を設定するには、android
名前空間を使用し、次の属性を設定します。autoSizeText
属性を none または uniform に設定します。none はデフォルト値です。uniform を設定すると、TextView
が横軸と縦軸で均一に拡大縮小されます。autoSizePresetSizes
属性をプリセット サイズの配列に設定します。リソースとして配列にアクセスするには、res/values/arrays.xml
ファイルで配列を定義します。
<resources> <array name="autosize_text_sizes"> <item>10sp</item> <item>12sp</item> <item>20sp</item> <item>40sp</item> <item>100sp</item> </array> </resources>
<?xml version="1.0" encoding="utf-8"?> <TextView android:layout_width="match_parent" android:layout_height="200dp" android:autoSizeTextType="uniform" android:autoSizePresetSizes="@array/autosize_text_sizes" />
サポート ライブラリの使用
- プリセット サイズを使用し、サポート ライブラリを介してプログラムで
TextView
の自動サイズ調整を設定するには、TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit)
メソッドを呼び出します。TextView
クラスのインスタンス、サイズの配列、サイズの任意のTypedValue
ディメンション単位を指定します。 - プリセット サイズを使用し、サポート ライブラリを介して XML で
TextView
の自動サイズ調整を設定するには、app
名前空間を使用し、レイアウト XML ファイルでautoSizeText
属性とautoSizePresetSizes
属性を設定します。
<resources> <array name="autosize_text_sizes"> <item>10sp</item> <item>12sp</item> <item>20sp</item> <item>40sp</item> <item>100sp</item> </array> </resources>
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:layout_width="match_parent" android:layout_height="200dp" app:autoSizeTextType="uniform" app:autoSizePresetSizes="@array/autosize_text_sizes" /> </LinearLayout>
参考情報
動的コンテンツを扱う際の TextView
の自動サイズ調整については、TextView の自動サイズ調整の動画をご覧ください。