TextView öğelerini otomatik boyutlandırma

Android 8.0 (API düzeyi 26) ve sonraki sürümlerde Metin boyutunu ayarlamak için TextView düzenine göre otomatik olarak genişletilir veya daraltılır. TextView özellikleri ve sınırları. Bu ayar, projenizin Dinamik içerikle farklı ekranlarda metin boyutunu optimize etme.

Destek Kitaplığı 26.0, TextView otomatik boyutlandırmasını tam olarak destekler Bu özellik, Android 8.0 (API düzeyi 26) veya önceki sürümleri çalıştıran cihazlarda kullanılabilir. android.support.v4.widget paketi, TextViewCompat değerini içeriyor geri uyumlu bir şekilde erişmek için bir web sitesi oluşturabilirsiniz.

TextView otomatik boyutunu ayarlama

Otomatik olarak boyutlandırmayı ayarlamak için çerçeveyi veya Destek Kitaplığı'nı kullanabilirsiniz. Programatik olarak veya XML olarak TextView. Alıcı: XML özelliklerini ayarlamak isterseniz Özellikler penceresi açılır.

TextView otomatik boyutlandırmasını üç şekilde ayarlayabilirsiniz: aşağıdaki bölümlerde açıklanmıştır:

Not: Bir XML dosyasında otomatik boyutlandırmayı ayarlarsanız "Wrap_content" değeri kullanılması önerilir. - Birlayout_widthlayout_height TextView. Bu da şunlara neden olabilir: beklenmedik sonuçlar.

Varsayılan

Varsayılan ayar, TextView ölçeğinin otomatik boyutlandırılmasına izin verir eksende eşit olarak paylaştırılır.

  • Varsayılan ayarı programatik olarak tanımlamak için setAutoSizeTextTypeWithDefaults(int autoSizeTextType) yöntemini çağırın. Devre dışı bırakmak için AUTO_SIZE_TEXT_TYPE_NONE ekleyin otomatik boyutlandırma özelliğini veya AUTO_SIZE_TEXT_TYPE_UNIFORM yatay ve dikey eksenleri eşit olarak ölçeklendirin.
  • Not: Tek tip için varsayılan boyutlar minTextSize = 12sp, maxTextSize = 112sp ve granularity = 1px.

  • XML'de varsayılan ayarı tanımlamak için android ad alanını kullanın. ve autoSizeTextType özelliğini none veya tek tip.
  • <?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ığı'ndan programatik olarak tanımlamak için şunu ara: TextViewCompat.setAutoSizeTextTypeWithDefaults(TextView textview, int autoSizeTextType) yöntemidir. TextView widget'ının bir örneğini ve metin türlerinden birini sağlayın: TextViewCompat.AUTO_SIZE_TEXT_TYPE_NONE veya TextViewCompat.AUTO_SIZE_TEXT_TYPE_UNIFORM.
  • XML'de varsayılan ayarı Destek Kitaplığı aracılığıyla tanımlamak için app ad alanını ayarlayın ve autoSizeTextType özelliğini none veya tek tip 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ı için bir aralık ve bir boyutunu belirten bir dizi boyut seçin. İlgili içeriği oluşturmak için kullanılan TextView, minimum ve maksimum boyut özelliklerini kullanabilirsiniz. Her artım, bir öğenin boyut özelliğinde belirtilen boyut değerini girin.

  • Programatik olarak bir metin boyutu aralığı ve boyut tanımlamak için "the" setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit). yöntemidir. Maksimum değeri, minimum değeri, ayrıntı düzeyini sağlayın değer ve herhangi bir TypedValue boyut birimi.
  • XML'de metin boyutu aralığı ve boyut tanımlamak için android ad alanı ve küme şu özelliklere sahiptir:
    • Ayarlayın: autoSizeTextType. özelliğini none veya uniform olarak ayarlayın. none değeri varsayılandır ve tek tip TextView, yatay ve dikey yönde eşit olarak ölçeklenir. yardımcı olabilir.
    • autoSizeMinTextSize değerini ayarlayın, autoSizeMaxTextSize, ve autoSizeStepGranularity otomatik olarak boyutlandırılacak boyutları tanımlamak için 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" />
    

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

  • Programatik olarak aracılığıyla bir metin boyutu aralığı ve bir boyut tanımlamak için destek kitaplığı, TextViewCompat.setAutoSizeTextTypeUniformWithConfiguration(int autoSizeMinTextSize, int autoSizeMaxTextSize, int autoSizeStepGranularity, int unit) yöntemidir. Maksimum değeri, minimum değeri, ayrıntı değerini ve herhangi bir TypedValue boyut birimi.
  • Destek aracılığıyla XML'de bir metin boyutu aralığı ve boyut tanımlamak için kullanıyorsanız app ad alanını kullanın ve autoSizeText autoSizeMinTextSize, autoSizeMaxTextSize ve autoSizeStepGranularity özellikleri.
  • <?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>
    

Ön ayar boyutları

Ön ayar boyutları, TextView, metni otomatik olarak boyutlandırırken seçer.

  • Otomatik boyutlandırmayı ayarlamak üzere önceden ayarlanmış boyutları kullanmak için TextView programatik olarak almak için setAutoSizeTextTypeUniformWithPresetSizes(int[] presetSizes, int unit) yöntemidir. Boyut dizisi ve herhangi bir TypedValue boyut birimini seçin.
  • Otomatik boyutlandırmayı ayarlamak üzere önceden ayarlanmış boyutları kullanmak için XML'de TextView ise android kullanın ad alanına girip şu özellikleri ayarlayın:
    • autoSizeTextType cihazını ayarlayın özelliğini none veya uniform olarak ayarlayın. none (hiçbiri) değeri varsayılandır ve tek tip TextView, yatay ve dikey yönde eşit olarak ölçeklenir. yardımcı olabilir.
    • Ayarlayın: autoSizePresetSizes özelliğini bir önceden ayarlanmış boyut dizisiyle ilişkilendirebilirsiniz. Diziye kaynağı varsa diziyi res/values/arrays.xml dosyası olarak kaydedebilirsiniz.
  • <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 ayarlı boyutları ayarlama

  • Otomatik boyutlandırmayı ayarlamak üzere önceden ayarlanmış boyutları kullanmak için Programatik olarak TextView kullanıyorsanız, TextViewCompat.setAutoSizeTextTypeUniformWithPresetSizes(TextView textView, int[] presetSizes, int unit) yöntemidir. TextView sınıfının bir örneğini sağlayın. ve boyut dizisi için herhangi bir TypedValue boyut birimini boyutunu değiştirmektir.
  • Otomatik boyutlandırmayı ayarlamak üzere önceden ayarlanmış boyutları kullanmak için Destek Kitaplığı üzerinden XML olarak TextView oluşturmak için app ad alanını belirtip autoSizeTextType ve autoSizePresetSizes özellikleri.
  • <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 ile çalışırken TextView öğesini otomatik boyutlandırma hakkında ek bilgi için içerik, izle Android Jetpack: TextView'u otomatik boyutlandırma.