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

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

استخدام الخطوط القابلة للتنزيل آليًا
بدءًا من الإصدار Android 8.0 (المستوى 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
في تطبيقك:
رائع
dependencies { ... implementation "androidx.core:core-ktx:2.2.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:2.2.0") }
استخدام الخطوط القابلة للتنزيل كموارد في XML
يوفّر Android 8.0 (المستوى 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"
الخطوط القابلة للتنزيل في Compose
بدءًا من Compose 1.2-alpha07، يمكنك استخدام واجهة برمجة تطبيقات Fonts القابلة للتنزيل في تطبيق Compose لتنزيل Google Fonts بشكل غير متزامن واستخدامها في تطبيقك. للحصول على مزيد من المعلومات، راجِع مستندات إنشاء خطوط قابلة للتنزيل.