تتيح ميزة "الخطوط القابلة للتنزيل" لواجهات برمجة التطبيقات طلب الخطوط من تطبيق موفّر بدلاً من تجميع الملفات في التطبيق أو السماح للتطبيق بتنزيل الخطوط. تتوفّر ميزة "الخطوط القابلة للتنزيل" على الأجهزة التي تعمل بالإصدار 14 من واجهة برمجة التطبيقات Android والإصدارات الأحدث من خلال مكتبة AndroidX Core.
توفّر خدمة "الخطوط القابلة للتنزيل" المزايا التالية:
- يقلّل من حجم التطبيق، وبالتالي يزيد من معدّل نجاح تثبيت التطبيق.
- تحسين حالة النظام بشكل عام، إذ يمكن لعدة تطبيقات مشاركة الخط نفسه من خلال موفّر. ويوفّر ذلك على المستخدمين بيانات شبكة الجوّال وذاكرة الهاتف ومساحة القرص. في هذا النموذج، يتم جلب الخط عبر الشبكة عند الحاجة إليه.
كيف تعمل ميزة "الخطوط القابلة للتنزيل"؟
موفّر الخطوط هو تطبيق يسترد الخطوط ويخزّنها مؤقتًا على الجهاز ليتمكّن التطبيقات الأخرى من طلب الخطوط ومشاركتها. يوضّح الشكل التالي هذه العملية.

الأساسيات
يمكنك استخدام ميزة "الخطوط القابلة للتنزيل" بالطرق التالية التي سيتم تناولها بالتفصيل في الأقسام اللاحقة:
استخدام ميزة "الخطوط القابلة للتنزيل" مع "استوديو Android" وخدمات Google Play
يمكنك ضبط تطبيقك على تنزيل الخطوط باستخدام الإصدار 3.0 من Android Studio أو إصدار أحدث. لمساعدتك في بدء استخدام ميزات Downloadable Fonts، يمكنك استخدام موفّر الخطوط من "خدمات Google Play".
- في محرّر التنسيق، اختَر
TextView
. بعد ذلك، ضمن السمات، اختَر fontFamily > المزيد من الخطوط.الشكل 2. استخدام محرِّر التنسيق - في قائمة المصدر، اختَر Google Fonts.
- في مربّع الخطوط، اختَر خطًا ضمن منطقة "قابل للتنزيل".
- اختَر إنشاء خط قابل للتنزيل وانقر على حسنًا.
الشكل 3. اختيار خط من نافذة المراجع
ينشئ Android Studio تلقائيًا ملفات XML ذات الصلة اللازمة لعرض الخط بشكل صحيح في تطبيقك.

استخدام ميزة "الخطوط القابلة للتنزيل" آليًا
بدءًا من الإصدار 8.0 من نظام التشغيل Android (المستوى 26 من واجهة برمجة التطبيقات)، يوفّر AndroidX Core دعمًا كاملاً لميزة "الخطوط القابلة للتنزيل". لمزيد من المعلومات حول استخدام مكتبة AndroidX Core، يُرجى الاطّلاع على قسم مكتبة AndroidX Core للخطوط القابلة للتنزيل في هذه الصفحة.
لاستخدام ميزة "الخطوط القابلة للتنزيل" آليًا، تفاعَل مع فئتَين رئيسيتَين:
android.graphics.fonts.FontRequest
: تتيح لك هذه الفئة إنشاء طلب خط.FontsContractCompat
: يتيح لك هذا الصف إنشاء كائنTypeface
جديد استنادًا إلى طلب الخط.
يسترد تطبيقك الخطوط من موفِّر الخطوط باستخدام واجهة برمجة التطبيقات FontsContract
. يفرض كل
مزوّد مجموعة من القيود على إصدارات Android ولغة البحث التي يتيحها. للحصول على مزيد من المعلومات حول إصدارات Android وتنسيق طلب البحث، يُرجى الرجوع إلى مستندات مقدّم الخدمة.
لتنزيل خط، أكمِل الخطوات التالية:
- أنشئ مثيلاً لفئة
android.graphics.fonts.FontRequest
لطلب الخط من مقدّم الخدمة. لإنشاء طلب، مرِّر المَعلمات التالية:- تمثّل هذه السمة الجهة المسؤولة عن توفير الخط.
- حزمة موفِّر الخطوط لإثبات هوية الموفِّر
- تمثّل هذه السمة طلب البحث الخاص بالخط. لمزيد من المعلومات حول تنسيقات طلبات البحث، راجِع مستندات مقدّم الخطوط، مثل Google Fonts.
- قائمة بمجموعات التجزئة للشهادات التي يجب التحقّق منها للتأكّد من هوية الموفِّر
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
- دالة ردّ الاتصال لتلقّي نتائج طلب الخط
- معالج لاسترداد الخطوط في سلسلة محادثات
- مثيل للفئة
يوضّح نموذج الرمز البرمجي التالي عملية "الخطوط القابلة للتنزيل" بشكل عام:
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 إمكانية استخدام ميزة "الخطوط القابلة للتنزيل" على الأجهزة التي تعمل بالإصدار 14 أو إصدار أحدث من واجهة برمجة التطبيقات لنظام Android. تحتوي حزمة
androidx.core.provider
على الفئتين FontsContractCompat
وFontRequest
لتنفيذ
ميزة "الخطوط القابلة للتنزيل" المتوافقة مع الإصدارات القديمة. تحتوي فئات AndroidX على طرق مشابهة لطرق إطار العمل، كما أنّ عملية تنزيل الخطوط تشبه العملية الموضّحة في القسم الخاص باستخدام الخطوط القابلة للتنزيل آليًا في هذه الصفحة.
لتنزيل الخطوط باستخدام AndroidX، استورِد الفئتين FontsContractCompat
وFontRequest
من حزمة androidx.core.provider
. أنشئ مثيلات لهذه الفئات بدلاً من فئات إطار العمل FontsContract
وandroid.graphics.fonts.FontRequest
.
إضافة تبعية AndroidX Core
لاستخدام الفئتين FontsContractCompat
وFontRequest
، عليك تعديل تبعيات مسار الفئة لمشروع تطبيقك ضمن بيئة التطوير.
لإضافة AndroidX Core إلى مشروع تطبيقك، أضِف التبعية التالية إلى ملف build.gradle
في تطبيقك:
Groovy
dependencies { ... implementation "androidx.core:core-ktx:1.16.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:1.16.0") }
استخدام الخطوط القابلة للتنزيل كموارد في XML
يوفّر الإصدار 8.0 من نظام التشغيل Android (المستوى 26 من واجهة برمجة التطبيقات) وAndroidX Core طريقة أسرع وأكثر ملاءمة لتحديد خط مخصّص كمورد في تنسيق XML. وهذا يعني أنّه ليس هناك حاجة إلى تجميع الخط كأحد مواد العرض. يمكنك تحديد خط مخصّص للتصميم بأكمله، ما يؤدي إلى تسريع إمكانية الاستخدام لعدة أوزان وأنماط، مثل الغامق أو المتوسط أو الخفيف، عند توفّرها.
- أنشئ ملف XML جديدًا في المجلد
res/font
. - أضِف عنصر جذر
<font-family>
واضبط السمات ذات الصلة بالخط، كما هو موضّح في نموذج ملف XML التالي: - أشِر إلى الملف باسم
@font/font_file_name
في ملف XML الخاص بالتصميم. يمكنك أيضًا استخدام الطريقةgetFont()
لاسترداد الملف آليًا، مثل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"