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

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

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

החל מגרסה 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"
    

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