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

איך עושים את זה ב-Compose
‫Jetpack Compose היא ערכת הכלים המומלצת לפיתוח ממשק משתמש ב-Android. איך משתמשים בטקסט ב-Compose.

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

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

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

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

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

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

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

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

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

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

  1. ב-Layout Editor, בוחרים TextView. אחר כך, בקטע מאפיינים, בוחרים באפשרות fontFamily > גופנים נוספים.
    תמונה של Layout Editor ב-Android Studio
    איור 2. שימוש ב-Layout Editor.
    מופיע החלון Resources.
  2. בתפריט מקור, בוחרים באפשרות Google Fonts.
  3. בתיבה גופנים, בוחרים גופן באזור "ניתן להורדה".
  4. בוחרים באפשרות Create downloadable font (יצירת גופן שניתן להורדה) ולוחצים על OK (אישור).
    תמונה שמראה איך לבחור גופנים מחלון המשאבים
    איור 3. בחירת גופן מהחלון משאבים.
  5. ‫Android Studio יוצר באופן אוטומטי את קובצי ה-XML הרלוונטיים שנדרשים כדי לעבד את הגופן בצורה נכונה באפליקציה.

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

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

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

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

האפליקציה מאחזרת גופנים מספק הגופנים באמצעות ה-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() כדי לאחזר את הגופן מספק הגופנים. השיטה מפעילה בדיקה כדי לקבוע אם הגופן קיים במטמון. אם הגופן לא זמין באופן מקומי, היא קוראת לספק הגופנים, מאחזרת את הגופן באופן אסינכרוני ומעבירה את התוצאה לקריאה החוזרת (callback). מעבירים את הפרמטרים הבאים:
    • מופע של המחלקה 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 מספק תמיכה בתכונה "גופנים שניתנים להורדה" במכשירים עם גרסאות API של Android מ-14 ומעלה. החבילה androidx.core.provider מכילה את המחלקות FontsContractCompat ו-FontRequest כדי להטמיע את התמיכה בתכונה "גופנים שניתנים להורדה" שתואמת לדורות קודמים. המחלקות של AndroidX מכילות שיטות שדומות לשיטות של המסגרת, ותהליך ההורדה של הגופנים דומה לתהליך שמתואר בקטע בדף הזה בנושא שימוש בגופנים שניתנים להורדה באופן פרוגרמטי.

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

הוספת תלות ב-AndroidX Core

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

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

מגניב

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

Kotlin

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

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

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

  1. יוצרים קובץ XML חדש בתיקייה res/font.
  2. מוסיפים רכיב בסיס <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"