TextView の自動サイズ設定

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 ファイルで自動サイズ設定を設定する場合、TextViewlayout_width 属性または layout_height 属性に値「wrap_content」を使用することはおすすめしません。予期しない結果が発生する可能性があります。

デフォルト

デフォルトの設定では、TextView の自動サイズ設定は横軸と縦軸で均一に拡大縮小されます。

  • デフォルトの設定をプログラムで定義するには、setAutoSizeTextTypeWithDefaults(int autoSizeTextType) メソッドを呼び出します。AUTO_SIZE_TEXT_TYPE_NONE を指定して自動サイズ設定機能をオフにするか、AUTO_SIZE_TEXT_TYPE_UNIFORM を指定して横軸と縦軸で均一に拡大縮小します。
  • : 均一な拡大縮小のデフォルトのディメンションは、minTextSize = 12spmaxTextSize = 112spgranularity = 1px. です。

  • デフォルトの設定を XML で定義するには、android 名前空間を使用し、autoSizeTextType 属性を none または uniform に設定します。
  •     <?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_NONETextViewCompat.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 名前空間を使用して、次の属性を設定します。
  •     <?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 ディメンション単位を指定します。
  • プリセット サイズを使用して TextView の自動サイズ設定を XML でセットアップするには、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 ディメンション単位を指定します。
  • プリセット サイズを使用して、サポート ライブラリを介して TextView の自動サイズ設定を XML でセットアップするには、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 の自動サイズ設定 をご覧ください。