שימוש בגופנים שניתנים להורדה

כדאי לנסות את התכונה 'כתיבה מהירה'
Jetpack Compose היא ערכת הכלים המומלצת לבניית ממשק משתמש ב-Android. איך משתמשים בטקסט ב'כתיבה'

התכונה 'גופנים להורדה' מאפשרת לממשקי API לבקש גופנים מאפליקציה של ספק, במקום לצרף קבצים לאפליקציה או לאפשר לאפליקציה להוריד גופנים. הגופנים שניתן להוריד זמינים במכשירים עם Android API מגרסה 14 ואילך דרך ספריית AndroidX Core.

אלה היתרונות שאפשר להפיק משימוש בגופנים שניתנים להורדה:

  • הקטנת גודל האפליקציה, וכתוצאה מכך הגדלת שיעור ההתקנות של האפליקציה.
  • שיפור התקינות הכוללת של המערכת, כי כמה אפליקציות יכולות לשתף את אותו גופן דרך ספק. הפעולה הזו חוסכת למשתמשים נתונים סלולריים, זיכרון הטלפון ומקום בכונן. במודל הזה, הגופן מאוחזר דרך הרשת במקרה הצורך.
כדי לקבל ניסיון מעשי עם גופנים שניתן להורדה, תוכלו להיעזר באפליקציית הדוגמה DownloadableFonts.

איך פועלים גופנים שניתן להורדה?

ספק גופנים הוא אפליקציה שמאחזרת גופנים ושומרת אותם במטמון באופן מקומי, כדי שאפליקציות אחרות יוכלו לבקש ולשתף גופנים. האיור הבא ממחיש את התהליך.

תמונה שמציגה את הרכיבים העיקריים בתהליך התאימות ל-Emoji
איור 1. תהליך ההורדה של הגופנים.

העקרונות הבסיסיים

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

שימוש בגופנים שניתנים להורדה ב-Android Studio וב-Google Play Services

אתם יכולים להגדיר שהאפליקציה תוריד גופנים באמצעות Android Studio 3.0 ואילך. כדי לעזור לכם להתחיל להשתמש בתכונות של 'גופנים שניתן להורדה', תוכלו להשתמש בספק הגופנים משירותי Google Play.

  1. בעורך הפריסה, בוחרים באפשרות TextView. לאחר מכן, בקטע מאפיינים, בוחרים באפשרות fontFamily > גופנים נוספים.
    תמונה שמוצגת בה הכלי לעריכת הפריסה של Android Studio
    איור 2. באמצעות עורך הפריסה.
    החלון Resources מופיע.
  2. בתפריט מקור, בוחרים באפשרות Google Fonts.
  3. בתיבה גופנים, בוחרים גופן בקטע 'ניתן להורדה'.
  4. בוחרים באפשרות יצירת גופן שניתן להורדה ולוחצים על אישור.
    תמונה שמראה איך לבחור גופנים מחלון המשאבים
    איור 3. בחירת גופן מהחלון Resources.
  5. Android Studio יוצר באופן אוטומטי את קובצי ה-XML הרלוונטיים שדרושים כדי לעבד את הגופן באפליקציה בצורה נכונה.

    תמונה שמראה איך להציג תצוגה מקדימה של גופנים
    איור 4. תצוגה מקדימה של קובץ הגופן.

שימוש בגופנים שניתן להורדה באופן פרוגרמטי

החל מ-Android 8.0 (רמת API 26), ב-AndroidX Core יש תמיכה מלאה בגופנים שניתנים להורדה. למידע נוסף על השימוש בספריית AndroidX Core, אפשר לעיין בקטע Downloadable Fonts AndroidX Core library בדף הזה.

כדי להשתמש באופן פרוגרמטי בתכונה 'גופנים שניתנים להורדה', יש ליצור אינטראקציה עם שתי סוגי מפתחות:

האפליקציה שלך מאחזרת גופנים מספק הגופנים באמצעות ה-API של FontsContract. לכל ספק יש קבוצה משלו של הגבלות על גרסאות Android ושפת השאילתות שהוא תומך בהן. למידע נוסף על גרסאות Android ופורמט השאילתה, עיינו במסמכי התיעוד של הספק.

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

  1. יוצרים מכונה של המחלקה android.graphics.fonts.FontRequest כדי לבקש את הגופן מהספק. כדי ליצור בקשה, מעבירים את הפרמטרים הבאים:
    • הרשות של ספק הגופן.
    • חבילת ספק הגופנים לאימות זהות הספק.
    • שאילתה של מחרוזת הגופן. למידע נוסף על פורמטים של שאילתות, אפשר לעיין במסמכים של ספק הגופנים, למשל Google Fonts.
    • רשימה של קבוצות של גיבוב (hash) לאישורים, כדי לאמת את הזהות של הספק.

    Kotlin

    val request = FontRequest(
            "com.example.fontprovider.authority",
            "com.example.fontprovider",
            "my font",
            certs
    )

    Java

    FontRequest request = new FontRequest("com.example.fontprovider",
                       "com.example.fontprovider", "my font", certs);
  2. יוצרים מכונה של המחלקה FontsContract.FontRequestCallback.
  3. משנים את השיטה onTypefaceRetrieved() כדי לציין שהבקשה לגבי הגופן הושלמה. מציינים את הגופן שאוחזר כפרמטר. אפשר להשתמש בשיטה הזו כדי להגדיר את הגופן לפי הצורך. לדוגמה, אפשר להגדיר את הגופן ב-TextView.
  4. כדי לקבל מידע על שגיאות בתהליך הבקשה של הגופן, משנים את השיטה onTypefaceRequestFailed(). מידע נוסף על קודי שגיאה מופיע במאמר קבועים של קודי שגיאה.
  5. קוראים לשיטה FontsContract.requestFont() כדי לאחזר את הגופן מספק הגופנים. השיטה מפעילה בדיקה כדי לקבוע אם הגופן קיים במטמון. אם הגופן לא זמין באופן מקומי, המערכת קוראת לספק הגופן, מאחזרת את הגופן באופן אסינכררוני ומעבירה את התוצאה לקריאה החוזרת. מעבירים את הפרמטרים הבאים:
    • מופע של המחלקה Context
    • מופע של המחלקה android.graphics.fonts.FontRequest
    • קריאה חוזרת (callback) כדי לקבל את התוצאות של בקשת הגופן
    • handler לאחזור גופנים בשרשור

הקוד לדוגמה הבא מדגים את התהליך הכולל של גופנים שניתן להורדה:

Kotlin

val request = FontRequest(
        "com.example.fontprovider.authority",
        "com.example.fontprovider",
        "my font",
        certs
)
val callback = object : FontsContract.FontRequestCallback() {

    override fun onTypefaceRetrieved(typeface: Typeface) {
        // Your code to use the font goes here.
        ...
    }

    override fun onTypefaceRequestFailed(reason: Int) {
        // Your code to deal with the failure goes here.
        ...
    }
}
FontsContract.requestFonts(context, request, handler, null, callback)

Java

FontRequest request = new FontRequest("com.example.fontprovider.authority",
        "com.example.fontprovider", "my font", certs);
FontsContract.FontRequestCallback callback =
    new FontsContract.FontRequestCallback() {
        @Override
        public void onTypefaceRetrieved(Typeface typeface) {
            // Your code to use the font goes here.
            ...
        }

        @Override
        public void onTypefaceRequestFailed(int reason) {
            // Your code to deal with the failure goes here.
            ...
        }
};
FontsContract.requestFonts(context, request, handler, null, callback);

למידע נוסף על הורדת גופן מספק גופנים, ראו DownloadableFonts.

שימוש בגופנים שניתנים להורדה עם AndroidX Core

AndroidX Core תומך בתכונה 'גופנים להורדה' במכשירים עם Android API מגרסה 14 ומעלה. החבילה androidx.core.provider מכילה את הכיתות FontsContractCompat ו-FontRequest להטמעת התמיכה בתכונה 'גופנים שניתן להורדה' שתואמת לגרסאות קודמות. הכיתות של AndroidX מכילות שיטות שדומות לשיטות של המסגרת, והתהליך להורדת גופנים דומה לתהליך שמתואר בקטע בדף הזה בנושא שימוש בגופנים שניתן להורדה באופן פרוגרמטי.

כדי להוריד גופנים באמצעות AndroidX, מייבאים את הכיתות FontsContractCompat ו-FontRequest מחבילת androidx.core.provider. אפשר ליצור מכונות של המחלקות האלה במקום המחלקות FontsContract ו-android.graphics.fonts.FontRequest של framework.

הוספת יחסי תלות ל-AndroidX Core

כדי להשתמש במחלקות FontsContractCompat ו-FontRequest, צריך לשנות את יחסי התלות של נתיבי ה-Classroom של פרויקט האפליקציה בתוך סביבת הפיתוח.

כדי להוסיף את AndroidX Core לפרויקט האפליקציה, צריך להוסיף את התלות הבאה לקובץ build.gradle של האפליקציה:

מגניב

dependencies {
    ...
    implementation "androidx.core:core-ktx:2.2.0"
}

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:2.2.0")
}

שימוש בגופנים שניתנים להורדה כמשאבים ב-XML

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

  1. יוצרים קובץ XML חדש בתיקייה res/font.
  2. מוסיפים רכיב root מסוג <font-family> ומגדירים את המאפיינים הקשורים לגופן, כפי שמוצג בקובץ ה-XML לדוגמה הבא:
  3. <?xml version="1.0" encoding="utf-8"?>
    <font-family xmlns:android="http://schemas.android.com/apk/res/android"
            android:fontProviderAuthority="com.example.fontprovider.authority"
            android:fontProviderPackage="com.example.fontprovider"
            android:fontProviderQuery="example font"
            android:fontProviderCerts="@array/certs">
    </font-family>
  4. יש לעיין בקובץ כ-@font/font_file_name בקובץ ה-XML של הפריסה. אפשר גם להשתמש ב-method‏ getFont() כדי לאחזר את הקובץ באופן פרוגרמטי, למשל getFont(R.font.font_file_name).

הצהרה מראש על גופנים במניפסט

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

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

  1. יוצרים מערך משאבים ב-res/values/arrays.xml ומצהירים על הגופנים שרוצים לאחזר מראש.
  2. res/values/arrays.xml
    <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <array name="preloaded_fonts">
            <item>@font/font1</item>
            <item>@font/font2</item>
        </array>
    </resources>
  3. משתמשים בתג meta-data כדי להצהיר על מערך המשאבים במניפסט.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />

הוספת אישורים

אם ספק הגופן לא מותקן מראש, או אם אתם משתמשים בספריית AndroidX Core, צריך להצהיר על האישורים שבהם נחתם ספק הגופן. המערכת משתמשת באישורים כדי לאמת את הזהות של ספק הגופן.

כדי להוסיף אישורים:

  1. יוצרים מערך מחרוזת עם פרטי האישור. למידע נוסף על פרטי האישור, אפשר לעיין במסמכי התיעוד של ספק הגופנים.
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
  3. מגדירים את המאפיין fontProviderCerts למערך.
  4. android:fontProviderCerts="@array/certs"

גופנים שניתנים להורדה ב'כתיבה'