Mengubah Ukuran Otomatis TextView

Dengan Android 8.0 (API level 26) dan yang lebih baru, Anda dapat memerintahkan TextView untuk memungkinkan ukuran teks meluas atau berkontraksi secara otomatis untuk mengisi tata letaknya berdasarkan Karakteristik dan batas TextView. Setelan ini akan memudahkan mengoptimalkan ukuran teks di berbagai layar dengan konten dinamis.

Support Library 26.0 sepenuhnya mendukung perubahan ukuran otomatis TextView di perangkat yang menjalankan Android versi 8.0 (API level 26) atau yang lebih lama. Paket android.support.v4.widget berisi TextViewCompat untuk mengakses fitur dengan cara yang kompatibel dengan versi sebelumnya.

Menyiapkan ukuran otomatis TextView

Anda dapat menggunakan framework atau {i>Support Library<i} 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, dijelaskan di bagian berikut:

Catatan: Jika Anda menetapkan pengubahan ukuran otomatis dalam file XML, kami tidak direkomendasikan menggunakan nilai "wrap_content" untuk Atribut layout_width atau layout_height dari TextView. Melakukan hal itu dapat menghasilkan hasil yang tidak diharapkan.

Default

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

  • Untuk mendefinisikan setelan default secara terprogram, panggil metode setAutoSizeTextTypeWithDefaults(int autoSizeTextType) . Berikan AUTO_SIZE_TEXT_TYPE_NONE untuk dinonaktifkan 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 setel autoSizeTextType ke tidak ada atau seragam.
  • <?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 mendefinisikan setelan {i>default<i} secara terprogram melalui {i>Support Library<i}, panggil 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 mendefinisikan setelan default dalam XML melalui Pustaka Dukungan, gunakan atribut Namespace app dan menetapkan 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 langkah yang ditetapkan di atribut perincian.

Menentukan perincian menggunakan Support Library

  • Untuk menentukan rentang ukuran teks dan dimensi secara terprogram melalui Support Library, panggil TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) . Berikan nilai maksimum, nilai minimum, nilai perincian, dan unit dimensi TypedValue.
  • Untuk mendefinisikan rentang ukuran teks dan dimensi dalam XML melalui Dukungan Library, gunakan namespace app, lalu tetapkan autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSize, dan Atribut 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 standar memungkinkan Anda menentukan nilai TextView memilih saat mengubah ukuran teks 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:
    • Setel autoSizeTextType ke none atau uniform. Nilai none adalah nilai default, dan uniform memungkinkan TextView diskalakan secara seragam pada horizontal dan sumbu 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 TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) . Berikan instance class TextView, 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 app dan tetapkan autoSizeTextType serta Atribut 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, tonton Android Jetpack: Pengubahan Ukuran Otomatis TextView.