TextView 자동 크기 조절

Android 8.0 (API 수준 26) 이상에서는 TextView의 특성 및 경계에 따라 텍스트 크기를 자동으로 확장하거나 축소하여 레이아웃을 채우도록 TextView에 지시할 수 있습니다. 이 설정을 사용하면 동적 콘텐츠가 있는 다양한 화면에서 텍스트 크기를 더 쉽게 최적화할 수 있습니다.

지원 라이브러리 26.0은 Android 버전 8.0 (API 수준 26) 이하를 실행하는 기기에서 TextView 자동 크기 조절 기능을 완벽하게 지원합니다. android.support.v4.widget 패키지에는 이전 버전과 호환되는 방식으로 기능에 액세스하기 위한 TextViewCompat 클래스가 포함되어 있습니다.

TextView 자동 크기 조절 설정

프레임워크 또는 지원 라이브러리를 사용하여 프로그래매틱 방식이나 XML로 TextView 자동 크기 조절을 설정할 수 있습니다. XML 속성을 설정하기 위해 Android 스튜디오에서 Properties 창을 사용할 수도 있습니다.

다음 섹션에 설명된 세 가지 방법으로 TextView 자동 크기 조절을 설정할 수 있습니다.

참고: XML 파일에서 자동 크기 조절을 설정했다면 TextViewlayout_width 또는 layout_height 속성에 'wrap_content' 값을 사용하지 않는 것이 좋습니다. 그렇게 하면 예기치 않은 결과가 발생할 수 있습니다.

기본 계정

기본 설정을 사용하면 TextView 자동 크기 조절이 가로축 및 세로축에서 균일하게 조정됩니다.

  • 프로그래매틱 방식으로 기본 설정을 정의하려면 setAutoSizeTextTypeWithDefaults(int autoSizeTextType) 메서드를 호출하세요. 자동 크기 조절 기능을 끄려면 AUTO_SIZE_TEXT_TYPE_NONE를 제공하고, 가로축 및 세로축을 균일하게 조정하려면 AUTO_SIZE_TEXT_TYPE_UNIFORM를 지정하세요.
  • 참고: 균일한 크기 조정의 기본 크기는 minTextSize = 12sp, maxTextSize = 112sp, granularity = 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_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, autoSizeMaxTextSizeautoSizeStepGranularity 속성을 설정하여 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, autoSizeMaxTextSizeautoSizeStepGranularity 속성을 설정하세요.
  • <?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 파일에서 autoSizeTextTypeautoSizePresetSizes 속성을 설정하세요.
  • <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: TextView 자동 크기 조절을 참고하세요.