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

רוצה לנסות את שיטת הכתיבה?
'Jetpack פיתוח נייטיב' היא ערכת הכלים המומלצת לממשק המשתמש ל-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. תצוגה מקדימה של קובץ הגופן.

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

החל מגרסה 8.0 של Android‏ (רמת 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() כדי לאחזר את הגופן מספק הגופנים. ה-method מפעיל בדיקה כדי לקבוע אם הגופן קיים במטמון. אם הגופן לא זמין באופן מקומי, המערכת קוראת לספק הגופן, מאחזרת את הגופן באופן אסינכררוני ומעבירה את התוצאה לקריאה החוזרת. מעבירים את הפרמטרים הבאים:
    • מופע של המחלקה 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.

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

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

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

Groovy

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"

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