גודל אוטומטי של TextViews

ב-Android מגרסה 8.0 (רמת API 26) ואילך, אפשר להורות TextView כדי לאפשר לגודל הטקסט להרחיב או להתכווץ באופן אוטומטי כדי למלא את פריסתו בהתאם המאפיינים והגבולות של TextView. בעזרת ההגדרה הזו קל יותר לבצע אופטימיזציה של גודל הטקסט במסכים שונים עם תוכן דינמי.

ב-Support Library 26.0 יש תמיכה מלאה בשינוי האוטומטי של גודל TextView במכשירים עם מערכת ההפעלה Android בגרסה 8.0 (רמת API 26) ומטה. החבילה android.support.v4.widget מכילה את TextViewCompat כדי לגשת לתכונות באופן תואם לאחור.

הגדרת גודל אוטומטי של TextView

ניתן להשתמש במסגרת או בספריית התמיכה כדי להגדיר את הגודל האוטומטי של TextView באופן פרוגרמטי או ב-XML. שפת תרגום להגדיר את מאפייני ה-XML, אפשר גם להשתמש במאפיינים החלון ב-Android Studio.

יש שלוש דרכים שבהן אפשר להגדיר את הגודל האוטומטי של TextView, שמתוארים בסעיפים הבאים:

הערה: אם הגדרתם שינוי גודל אוטומטי בקובץ XML, אנחנו לא מומלץ להשתמש בערך 'wrap_content' עבור layout_width או layout_height של מאפיין TextView פעולה זו עשויה להניב מתוצאות בלתי צפויות.

ברירת מחדל

הגדרת ברירת המחדל מאפשרת לשנות את הגודל של TextView באופן אוטומטי באופן אחיד על צירים אופקיים ואנכיים.

  • כדי לקבוע את הגדרת ברירת המחדל באופן פרוגרמטי, קוראים לפונקציה setAutoSizeTextTypeWithDefaults(int autoSizeTextType) . צריך לספק AUTO_SIZE_TEXT_TYPE_NONE כדי להשבית את תכונת השינוי האוטומטי או AUTO_SIZE_TEXT_TYPE_UNIFORM את קנה המידה של הצירים האופקיים והאנכיים באופן אחיד.
  • הערה: מאפייני ברירת המחדל של מודעה אחידה ההתאמה לעומס (scaling) היא 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" />
    

שימוש בספריית התמיכה כדי לקבוע את הגדרת ברירת המחדל

  • כדי להגדיר את הגדרת ברירת המחדל באופן פרוגרמטי דרך ספריית התמיכה: קוראים לפונקציה 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 מאפשר קנה מידה 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 כללא או כאחיד. ללא הוא ערך ברירת המחדל, והמאפיין 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" />
    

הגדרת גדלים מוגדרים מראש באמצעות ספריית התמיכה

  • כדי להשתמש בגדלים מוגדרים מראש להגדרת הגודל האוטומטי של 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.