TextView öğelerini otomatik boyutlandırma

Android 8.0 (API düzeyi 26) ve sonraki sürümlerde bir TextView öğesine, metin boyutunun, düzenini TextView özelliklerine ve sınırlarına göre otomatik olarak doldurması için genişletip küçülmesi talimatını verebilirsiniz. Bu ayar, dinamik içeriğe sahip farklı ekranlarda metin boyutunu optimize etmeyi kolaylaştırır.

Destek Kitaplığı 26.0, Android 8.0 (API düzeyi 26) veya önceki sürümleri çalıştıran cihazlarda otomatik boyutlandırma TextView özelliğini tam olarak destekler. android.support.v4.widget paketi, özelliklere geriye dönük uyumlu şekilde erişmek için TextViewCompat sınıfını içerir.

TextView'u otomatik olarak boyutlandırma

TextView otomatik boyutlandırmasını programatik olarak veya XML halinde ayarlamak için çerçeveyi ya da Destek Kitaplığı'nı kullanabilirsiniz. XML özelliklerini ayarlamak için Android Studio'daki Özellikler penceresini de kullanabilirsiniz.

TextView için otomatik boyutlandırmayı üç şekilde ayarlayabilirsiniz. Bu ayarlar, aşağıdaki bölümlerde açıklanmıştır:

Not: Bir XML dosyasında otomatik boyutlandırmayı ayarlarsanız TextView öğesinin layout_width veya layout_height özellikleri için "wrap_content" değerini kullanmanız önerilmez. Aksi takdirde beklenmedik sonuçlarla karşılaşabilirsiniz.

Varsayılan

Varsayılan ayar, TextView öğesinin otomatik olarak ölçeklendirilmesinin yatay ve dikey eksenlerde eşit şekilde ölçeklendirilmesini sağlar.

  • Varsayılan ayarı programatik olarak tanımlamak için setAutoSizeTextTypeWithDefaults(int autoSizeTextType) yöntemini çağırın. Otomatik boyutlandırma özelliğini devre dışı bırakmak için AUTO_SIZE_TEXT_TYPE_NONE değerini veya yatay ve dikey eksenleri eşit şekilde ölçeklendirmek için AUTO_SIZE_TEXT_TYPE_UNIFORM değerini sağlayın.
  • Not: Tek tip ölçeklendirme için varsayılan boyutlar minTextSize = 12sp, maxTextSize = 112sp ve granularity = 1px.'dir.

  • XML'de varsayılan ayarı tanımlamak için android ad alanını kullanın ve autoSizeTextType özelliğini none veya uniform olarak ayarlayın.
  • <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform" />
    

Destek Kitaplığı'nı kullanarak varsayılan ayarı tanımlama

  • Varsayılan ayarı Destek Kitaplığı aracılığıyla programatik olarak tanımlamak için TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType) yöntemini çağırın. TextView widget'ının bir örneğini ve TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE veya TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM gibi metin türlerinden birini sağlayın.
  • XML'de Destek Kitaplığı aracılığıyla varsayılan ayarı tanımlamak için app ad alanını kullanın ve autoSizeTextType özelliğini none veya uniform olarak ayarlayın.
  • <?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>
    

Ayrıntı düzeyi

Minimum ve maksimum metin boyutları aralığı ve her adımın boyutunu belirten bir boyut tanımlayabilirsiniz. TextView, minimum ve maksimum boyut özellikleri arasındaki bir aralıkta eşit şekilde ölçeklenir. Her artış, ayrıntı düzeyi özelliğinde ayarlanan adım boyutu olarak gerçekleşir.

  • Programatik olarak bir metin boyutu aralığı ve boyutu tanımlamak için setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) yöntemini çağırın. Maksimum değer, minimum değer, ayrıntı değeri ve herhangi bir TypedValue boyut birimini sağlayın.
  • XML'de bir metin boyutu aralığı ve boyut tanımlamak için android ad alanını kullanın ve aşağıdaki özellikleri ayarlayın:
    • autoSizeTextType özelliğini none veya uniform olarak ayarlayın. none (hiçbiri) değeri varsayılan değerdir ve uniform (tek tip), TextView özelliğinin yatay ve dikey eksenlerde eşit şekilde ölçeklenmesini sağlar.
    • TextView için otomatik boyutlandırma boyutlarını tanımlamak üzere autoSizeMinTextSize, autoSizeMaxTextSize ve autoSizeStepGranularity özelliklerini ayarlayın.
  • <?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" />
    

Destek Kitaplığı'nı kullanarak ayrıntı düzeyini tanımlama

  • Destek Kitaplığı üzerinden programatik olarak bir metin boyutu aralığı ve boyut tanımlamak için TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) yöntemini çağırın. Maksimum değeri, minimum değeri, ayrıntı değerini ve herhangi bir TypedValue boyut birimini sağlayın.
  • Destek Kitaplığı aracılığıyla XML'de bir dizi metin boyutu ve boyut tanımlamak için app ad alanını kullanın ve düzen XML dosyasında autoSizeText, autoSizeMinTextSize, autoSizeMaxTextSize ve autoSizeStepGranularity özelliklerini ayarlayın.
  • <?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>
    

Hazır ayar boyutları

Hazır ayar boyutları, metni otomatikleştirirken TextView öğesinin seçtiği değerleri belirtmenize olanak tanır.

  • TextView öğesini programatik olarak otomatik boyutlandırmayı ayarlamak üzere hazır ayar boyutlarını kullanmak için setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit) yöntemini çağırın. Boyut için bir boyut dizisi ve herhangi bir TypedValue boyut birimi sağlayın.
  • XML'de TextView öğesi için otomatik boyutlandırmayı ayarlamak üzere hazır ayar boyutlarını kullanmak için android ad alanını kullanın ve aşağıdaki özellikleri ayarlayın:
    • autoSizeTextType özelliğini none veya uniform olarak ayarlayın. none (hiçbiri) değeri varsayılan değerdir ve uniform (tek tip), TextView özelliğinin yatay ve dikey eksenlerde eşit şekilde ölçeklenmesini sağlar.
    • autoSizePresetSizes özelliğini önceden ayarlanmış bir boyut dizisine ayarlayın. Diziye kaynak olarak erişmek için diziyi res/values/arrays.xml dosyasında tanımlayın.
  • <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" />
    

Destek Kitaplığı'nı kullanarak hazır ayar boyutları ayarlama

  • Destek Kitaplığı üzerinden programatik olarak TextView otomatik boyutlandırmasını ayarlamak üzere hazır ayar boyutlarını kullanmak için TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) yöntemini çağırın. Boyut için TextView sınıfının bir örneğini, boyut dizisini ve herhangi bir TypedValue boyut birimini sağlayın.
  • Destek Kitaplığı aracılığıyla XML'de TextView için otomatik boyutlandırmayı ayarlamak üzere hazır ayar boyutlarını kullanmak için app ad alanını kullanın ve düzen XML dosyasında autoSizeTextType ve autoSizePresetSizes özelliklerini ayarlayın.
  • <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>
    

Ek kaynaklar

Dinamik içerikle çalışırken bir TextView öğesini otomatik boyutlandırma hakkında daha fazla bilgi için Android Jetpack: TextView'u Otomatik Boyutlandırma videosunu izleyin.