أحجام النصوص تلقائيًا

في إصدار Android 8.0 (المستوى 26 لواجهة برمجة التطبيقات) والإصدارات الأحدث، يمكنك توجيه TextView لإتاحة حجم النص أو التعاقد تلقائيًا لملء تخطيطه بناءً على سمات TextView وحدودها يسهل هذا الإعداد في تحسين حجم النص على الشاشات المختلفة باستخدام المحتوى الديناميكي.

دعم Library Library 26.0 يتيح بشكل كامل ضبط الحجم التلقائي لـ TextView على الأجهزة التي تعمل بالإصدار 8.0 من نظام التشغيل Android (المستوى 26 من واجهة برمجة التطبيقات) أو الإصدارات الأقدم. تحتوي حزمة android.support.v4.widget على TextViewCompat الوصول إلى الميزات بطريقة متوافقة مع الأنظمة القديمة.

إعداد الحجم التلقائي لـ TextView

ويمكنك استخدام إطار العمل أو مكتبة الدعم لإعداد الحجم التلقائي TextView آليًا أو بتنسيق XML. إلى اضبط سمات XML، يمكنك أيضًا استخدام الخصائص نافذة جديدة في "استوديو Android"

هناك ثلاث طرق يمكنك من خلالها ضبط حجم TextView تلقائيًا، الموضحة في الأقسام التالية:

ملاحظة: إذا ضبطت الضبط التلقائي في ملف XML، لن يُنصح باستخدام القيمة "wrap_content". بالنسبة إلى سمتا layout_width أو layout_height TextView القيام بذلك قد ينتج نتائج غير متوقعة.

تلقائي

يتيح الإعداد التلقائي ضبط حجم TextView تلقائيًا. بشكل موحد على المحاور الأفقية والرأسية.

  • لتحديد الإعداد الافتراضي آليًا، يمكنك طلب setAutoSizeTextTypeWithDefaults(int autoSizeTextType) . أدخل AUTO_SIZE_TEXT_TYPE_NONE لإيقاف الميزة ميزة الحجم التلقائي أو AUTO_SIZE_TEXT_TYPE_UNIFORM قياس المحاور الأفقية والرأسية بشكل موحد.
  • ملاحظة: الأبعاد التلقائية للتوحيد التحجيم هي minTextSize = 12sp، maxTextSize = 112sp وgranularity = 1px.

  • لتحديد الإعداد التلقائي في XML، استخدِم مساحة الاسم android وضبط السمة autoSizeTextType إلى none أو موحَّد.
  • <?xml version="1.0" encoding="utf-8"?>
    <TextView
        android:layout_width="match_parent"
        android:layout_height="200dp"
        android:autoSizeTextType="uniform" />
    

تحديد الإعداد التلقائي باستخدام Support Library (مكتبة الدعم)

  • لتحديد الإعداد الافتراضي آليًا من خلال مكتبة الدعم، طلب 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 هو الإعداد التلقائي، وسيتيح توحيد TextView مقياس موحد على أفقي و المحاور الرأسية.
    • اضبط autoSizeMinTextSize، autoSizeMaxTextSize, وautoSizeStepGranularity لتحديد أبعاد الضبط التلقائي 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 واضبط autoSizeText، autoSizeMinTextSize، autoSizeMaxTextSize، autoSizeStepGranularity سمات في ملف XML للتنسيق.
  • <?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. وحدة البعد للحجم.
  • لاستخدام الأحجام المُعدَّة مسبقًا من أجل ضبط الحجم التلقائي TextView في XML، يمكنك استخدام android مساحة الاسم وتعيين السمات التالية:
    • ضبط autoSizeTextType إما إلى none أو uniform. زر none القيمة هي القيمة التلقائية، ويتيح لك توحيد 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 الحجم.
  • لاستخدام الأحجام المُعدَّة مسبقًا من أجل ضبط الحجم التلقائي TextView في XML عبر مكتبة الدعم، استخدم مساحة الاسم app وتعيين autoSizeTextType autoSizePresetSizes في ملف تنسيق 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"?>
    <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 تلقائيًا