התכונה 'גופנים להורדה' מאפשרת לממשקי API לבקש גופנים מאפליקציה של ספק, במקום לצרף קבצים לאפליקציה או לאפשר לאפליקציה להוריד גופנים. הגופנים שניתן להוריד זמינים במכשירים עם Android API מגרסה 14 ואילך דרך ספריית AndroidX Core.
אלה היתרונות שאפשר להפיק משימוש בגופנים שניתנים להורדה:
- הקטנת גודל האפליקציה, וכתוצאה מכך הגדלת שיעור ההתקנות של האפליקציה.
- שיפור התקינות הכוללת של המערכת, כי כמה אפליקציות יכולות לשתף את אותו גופן דרך ספק. הפעולה הזו חוסכת למשתמשים נתונים סלולריים, זיכרון הטלפון ומקום בכונן. במודל הזה, הגופן מאוחזר דרך הרשת במקרה הצורך.
איך פועלים גופנים שניתן להורדה?
ספק גופנים הוא אפליקציה שמאחזרת גופנים ושומרת אותם במטמון באופן מקומי, כדי שאפליקציות אחרות יוכלו לבקש ולשתף גופנים. האיור הבא ממחיש את התהליך.
העקרונות הבסיסיים
אפשר להשתמש בתכונה 'גופנים שניתנים להורדה' בדרכים הבאות, שמפורטות בהרחבה בסעיפים הבאים:
שימוש בגופנים שניתנים להורדה ב-Android Studio וב-Google Play Services
אתם יכולים להגדיר שהאפליקציה תוריד גופנים באמצעות Android Studio 3.0 ואילך. כדי לעזור לכם להתחיל להשתמש בתכונות של 'גופנים שניתן להורדה', תוכלו להשתמש בספק הגופנים משירותי Google Play.
- בעורך הפריסה, בוחרים באפשרות
TextView
. לאחר מכן, בקטע מאפיינים, בוחרים באפשרות fontFamily > גופנים נוספים. החלון Resources מופיע. - בתפריט מקור, בוחרים באפשרות Google Fonts.
- בתיבה גופנים, בוחרים גופן בקטע 'ניתן להורדה'.
- בוחרים באפשרות יצירת גופן שניתן להורדה ולוחצים על אישור.
Android Studio יוצר באופן אוטומטי את קובצי ה-XML הרלוונטיים שדרושים כדי לעבד את הגופן באפליקציה בצורה נכונה.
שימוש בגופנים שניתן להורדה באופן פרוגרמטי
החל מ-Android 8.0 (רמת API 26), ב-AndroidX Core יש תמיכה מלאה בגופנים שניתנים להורדה. למידע נוסף על השימוש בספריית AndroidX Core, אפשר לעיין בקטע Downloadable Fonts AndroidX Core library בדף הזה.
כדי להשתמש באופן פרוגרמטי בתכונה 'גופנים שניתנים להורדה', יש ליצור אינטראקציה עם שתי סוגי מפתחות:
android.graphics.fonts.FontRequest
: הכיתה הזו מאפשרת ליצור בקשה לגופן.FontsContractCompat
: המחלקה הזו מאפשרת ליצור אובייקטTypeface
חדש על סמך בקשת הגופן.
האפליקציה שלך מאחזרת גופנים מספק הגופנים באמצעות ה-API של FontsContract
. לכל ספק יש קבוצה משלו של הגבלות על גרסאות Android ושפת השאילתות שהוא תומך בהן. למידע נוסף על גרסאות Android ופורמט השאילתה, עיינו במסמכי התיעוד של הספק.
כדי להוריד גופן, מבצעים את השלבים הבאים:
- יוצרים מכונה של המחלקה
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);
- יוצרים מכונה של המחלקה
FontsContract.FontRequestCallback
. - משנים את השיטה
onTypefaceRetrieved()
כדי לציין שהבקשה לגבי הגופן הושלמה. מציינים את הגופן שאוחזר כפרמטר. אפשר להשתמש בשיטה הזו כדי להגדיר את הגופן לפי הצורך. לדוגמה, אפשר להגדיר את הגופן ב-TextView
. - כדי לקבל מידע על שגיאות בתהליך הבקשה של הגופן, משנים את השיטה
onTypefaceRequestFailed()
. מידע נוסף על קודי שגיאה מופיע במאמר קבועים של קודי שגיאה. - קוראים לשיטה
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. המשמעות היא שאין צורך לקבץ את הגופן כנכס. אתם יכולים להגדיר גופן מותאם אישית לכל העיצוב, וכך לשפר את נוחות השימוש במגוון משקלים וסגנונות, כמו מודגש, בינוני או בהיר, אם הם זמינים.
- יוצרים קובץ XML חדש בתיקייה
res/font
. - מוסיפים רכיב root מסוג
<font-family>
ומגדירים את המאפיינים הקשורים לגופן, כפי שמוצג בקובץ ה-XML לדוגמה הבא: - יש לעיין בקובץ כ-
@font/font_file_name
בקובץ ה-XML של הפריסה. אפשר גם להשתמש ב-methodgetFont()
כדי לאחזר את הקובץ באופן פרוגרמטי, למשלgetFont(R.font.font_file_name)
.
<?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>
הצהרה מראש על גופנים במניפסט
הרחבת הפריסה ואחזור המשאבים הן משימות סינכרוניות. כברירת מחדל, הניסיון הראשון לאחזר גופנים מפעיל בקשה לספק הגופנים, ולכן משך הזמן של היצירה הראשונה של הפריסה ארוך יותר. כדי למנוע את העיכוב, אפשר להצהיר מראש על גופנים שצריך לאחזר במניפסט. אחרי שהמערכת מאחזרת את הגופן מהספק, הוא זמין באופן מיידי. אם אחזור הגופן נמשך יותר זמן מהצפוי, המערכת מפסיקה את תהליך האחזור ומשתמשת בגופן ברירת המחדל.
כדי להצהיר מראש על גופנים במניפסט:
- יוצרים מערך משאבים ב-
res/values/arrays.xml
ומצהירים על הגופנים שרוצים לאחזר מראש. - משתמשים בתג
meta-data
כדי להצהיר על מערך המשאבים במניפסט.
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>
<meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
הוספת אישורים
אם ספק הגופן לא מותקן מראש, או אם אתם משתמשים בספריית AndroidX Core, צריך להצהיר על האישורים שבהם נחתם ספק הגופן. המערכת משתמשת באישורים כדי לאמת את הזהות של ספק הגופן.
כדי להוסיף אישורים:
- יוצרים מערך מחרוזת עם פרטי האישור. למידע נוסף על פרטי האישור, אפשר לעיין במסמכי התיעוד של ספק הגופנים.
- מגדירים את המאפיין
fontProviderCerts
למערך.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"