تتيح ميزة "الخطوط القابلة للتنزيل" لواجهات برمجة التطبيقات طلب الخطوط من تطبيق موفّر خدمة بدلاً من تجميع الملفات في التطبيق أو السماح للتطبيق بتنزيل الخطوط. تتوفر الخطوط القابلة للتنزيل على الأجهزة التي تعمل بالإصدار 14 من واجهة برمجة تطبيقات Android والإصدارات الأحدث من خلال مكتبة AndroidX Core.
توفر الخطوط القابلة للتنزيل المزايا التالية:
- يقلل حجم التطبيق، وبالتالي يزيد من معدّل نجاح تثبيت التطبيق.
- يساعد هذا الإجراء في تحسين حالة النظام بشكل عام، إذ يمكن لعدة تطبيقات مشاركة الخط نفسه من خلال مقدّم خدمة. يؤدي ذلك إلى توفير البيانات الخلوية للمستخدمين وذاكرة الهاتف ومساحة القرص. في هذا النموذج، يتم استرجاع الخط عبر الشبكة عند الحاجة.
كيف تعمل الخطوط القابلة للتنزيل؟
موفِّر الخطوط هو تطبيق يسترد الخطوط ويخزّنها مؤقتًا محليًا، حتى تتمكن التطبيقات الأخرى من طلب الخطوط ومشاركتها. يوضح الشكل التالي هذه العملية.
الأساسيات
يمكنك استخدام ميزة الخطوط القابلة للتنزيل بالطرق التالية، والتي ستتم مناقشتها بالتفصيل في الأقسام اللاحقة:
استخدام الخطوط القابلة للتنزيل من خلال "استوديو Android" وخدمات Google Play
يمكنك ضبط تطبيقك لتنزيل الخطوط باستخدام الإصدار 3.0 من "استوديو Android" أو إصدار أحدث. لمساعدتك في بدء استخدام ميزات الخطوط القابلة للتنزيل، يمكنك استخدام موفِّر الخطوط من "خدمات Google Play".
- في محرِّر التنسيق، اختَر
TextView
. بعد ذلك، ضمن السمات، اختَر fontFamily > المزيد من الخطوط. تظهر نافذة الموارد. - في قائمة المصدر، اختَر Google Fonts.
- في مربّع الخطوط، اختَر خطًا ضمن المنطقة "قابل للتنزيل".
- اختَر إنشاء خط قابل للتنزيل وانقر على حسنًا.
تنشئ "استوديو 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 API القابلة للتنزيل في تطبيق Compose لتنزيل Google Fonts بشكل غير متزامن واستخدامها في تطبيقك. للحصول على مزيد من المعلومات، راجِع مستندات إنشاء خطوط قابلة للتنزيل.