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

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

يتوافق الإصدار 26.0 من Support Library بشكل كامل مع ميزة "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 على بدون أو موحّد.
  • <?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 على بدون أو موحّد.
  • <?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 (بدون) هي القيمة التلقائية، وتتيح القيمة uniform ضبط 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" />
    

تحديد الدقة باستخدام Support Library

  • لتحديد نطاق من أحجام النص وسمة معيّنة آليًا من خلال "مكتبة الدعم"، يمكنك استدعاء طريقة 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 (بدون) هي القيمة التلقائية، وتتيح القيمة uniform ضبط 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" />
    

إعداد الأحجام المُعدَّة مسبقًا باستخدام Support Library

  • لاستخدام أحجام معدّة مسبقًا لإعداد تغيير الحجم التلقائي لحجم 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: ضبط حجم النص تلقائيًا.