Android 8.0(API レベル 26)以降では、TextView
に対して、TextView
の特性と境界に基づいてテキストサイズを自動的に拡大または縮小し、レイアウトを埋めるように指示できます。この設定により、動的コンテンツを使用するさまざまな画面のテキストサイズを簡単に最適化できます。
サポート ライブラリ 26.0 は、Android バージョン 8.0(API レベル 26)以下を搭載しているデバイスで、自動サイズ設定 TextView
機能を完全にサポートしています。android.support.v4.widget
パッケージには、下位互換性のある方法で機能にアクセスするための TextViewCompat
クラスが含まれています。
TextView の自動サイズを設定する
フレームワークまたはサポート ライブラリを使用して、TextView
の自動サイズ設定をプログラムまたは XML で設定できます。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
名前空間を使用して次の属性を設定します。autoSizeTextType
属性は 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
名前空間を使用し、次の属性を設定します。autoSizeTextType
属性は 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 ファイルでautoSizeTextType
属性と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
の自動サイズ調整について詳しくは、Android Jetpack: Autosizing TextView をご覧ください。