Mengubah Ukuran Otomatis TextView

Dengan Android 8.0 (API level 26) dan yang lebih tinggi, Anda dapat memerintahkan TextView agar ukuran teks otomatis meluas atau menyusut untuk mengisi tata letaknya berdasarkan karakteristik dan batas TextView. Setelan ini mempermudah pengoptimalan ukuran teks di berbagai layar dengan konten dinamis.

Support Library 26.0 sepenuhnya mendukung fitur pengubahan ukuran otomatis TextView di perangkat yang menjalankan Android versi 8.0 (API level 26) atau yang lebih rendah. Paket android.support.v4.widget berisi class TextViewCompat untuk mengakses fitur dengan cara yang memiliki kompatibilitas mundur.

Menyiapkan ukuran otomatis TextView

Anda dapat menggunakan framework atau Support Library untuk menyiapkan pengubahan ukuran otomatis TextView secara terprogram atau dalam XML. Untuk menetapkan atribut XML, Anda juga dapat menggunakan jendela Properties di Android Studio.

Ada tiga cara untuk menyiapkan pengubahan ukuran otomatis TextView, yang dijelaskan di bagian berikut:

Catatan: Jika Anda menetapkan pengubahan ukuran otomatis dalam file XML, sebaiknya jangan gunakan nilai "wrap_content" untuk atribut layout_width atau layout_height dari TextView. Tindakan tersebut dapat memberikan hasil yang tidak diharapkan.

Default

Setelan default memungkinkan pengubahan ukuran otomatis TextView terskala secara seragam pada sumbu horizontal dan vertikal.

  • Untuk menentukan setelan default secara terprogram, panggil metode setAutoSizeTextTypeWithDefaults(int autoSizeTextType) . Berikan AUTO_SIZE_TEXT_TYPE_NONE untuk menonaktifkan fitur pengubahan ukuran otomatis atau AUTO_SIZE_TEXT_TYPE_UNIFORM untuk menskalakan sumbu horizontal dan vertikal secara seragam.
  • Catatan: Dimensi default untuk penskalaan seragam adalah minTextSize = 12sp, maxTextSize = 112sp, dan granularity = 1px.

  • Untuk menentukan setelan default dalam XML, gunakan namespace android dan tetapkan atribut autoSizeTextType ke none atau uniform.
  • <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform" />
    

Menentukan setelan default menggunakan Support Library

  • Untuk menentukan setelan default secara terprogram melalui Support Library, panggil metode TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType). Sediakan instance widget TextView dan salah satu jenis teks, seperti TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE atau TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM.
  • Untuk menentukan setelan default dalam XML melalui Support Library, gunakan namespace app dan tetapkan atribut autoSizeTextType ke none atau 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>
    

Perincian

Anda dapat menentukan rentang ukuran teks minimum dan maksimum serta dimensi yang menentukan ukuran setiap langkah. TextView menskalakan secara seragam dalam rentang antara atribut ukuran minimum dan maksimum. Setiap penambahan terjadi sebagai ukuran langkah yang ditetapkan di atribut perincian.

  • Untuk menentukan rentang ukuran teks dan dimensi secara terprogram, panggil metode setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). Berikan nilai maksimum, nilai minimum, nilai perincian, dan unit dimensi TypedValue.
  • Untuk menentukan rentang ukuran teks dan dimensi dalam XML, gunakan namespace android dan tetapkan atribut berikut:
    • Tetapkan atribut autoSizeTextType ke none atau uniform. Nilai none adalah default, dan uniform memungkinkan TextView menskalakan secara seragam pada sumbu horizontal dan vertikal.
    • Tetapkan atribut autoSizeMinTextSize, autoSizeMaxTextSize, dan autoSizeStepGranularity guna menentukan dimensi untuk pengubahan ukuran otomatis 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" />
    

Menentukan perincian menggunakan Support Library

  • Untuk menentukan rentang ukuran teks dan dimensi secara terprogram melalui Support Library, panggil metode TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). Berikan nilai maksimum, nilai minimum, nilai perincian, dan unit dimensi TypedValue.
  • Untuk menentukan rentang ukuran teks dan dimensi dalam XML melalui Support Library, gunakan namespace app dan tetapkan atribut autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSize, dan autoSizeStepGranularity dalam file XML tata letak.
  • <?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>
    

Ukuran standar

Ukuran preset memungkinkan Anda menentukan nilai yang dipilih TextView saat mengubah ukuran teks secara otomatis.

  • Untuk menggunakan ukuran preset guna menyiapkan pengubahan ukuran otomatis TextView secara terprogram, panggil metode setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit). Berikan array ukuran dan unit dimensi TypedValue apa pun untuk ukurannya.
  • Untuk menggunakan ukuran preset guna menyiapkan pengubahan ukuran otomatis TextView dalam XML, gunakan namespace android dan tetapkan atribut berikut:
    • Tetapkan atribut autoSizeTextType ke none atau uniform. Nilai none adalah default, dan uniform memungkinkan TextView menskalakan secara seragam pada sumbu horizontal dan vertikal.
    • Tetapkan atribut autoSizePresetSizes ke array ukuran preset. Untuk mengakses array tersebut sebagai resource, tentukan array dalam file 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" />
    

Menyiapkan ukuran preset menggunakan Support Library

  • Untuk menggunakan ukuran preset guna menyiapkan pengubahan ukuran otomatis TextView secara terprogram melalui Support Library, panggil metode TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit). Sediakan instance class TextView, array ukuran, dan unit dimensi TypedValue apa pun untuk ukurannya.
  • Untuk menggunakan ukuran preset guna menyiapkan pengubahan ukuran otomatis TextView dalam XML melalui Support Library, gunakan namespace app dan tetapkan atribut autoSizeTextType dan autoSizePresetSizes dalam file XML tata letak.
  • <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>
    

Referensi lainnya

Untuk informasi tambahan tentang pengubahan ukuran otomatis TextView saat bekerja dengan konten dinamis, tonton Android Jetpack: Autosizing TextView.