تتيح ميزة "الخطوط القابلة للتنزيل" لواجهات برمجة التطبيقات طلب خطوط من تطبيق مقدّم خدمة بدلاً من تجميع الملفات في التطبيق أو السماح للتطبيق بتنزيل الخطوط. تتوفّر "الخطوط" القابلة للتنزيل على الأجهزة التي تعمل بالإصدار 14 من واجهة برمجة تطبيقات Android والإصدارات الأحدث من خلال مكتبة AndroidX Core.
توفر الخطوط القابلة للتنزيل المزايا التالية:
- تُقلِّل حجم التطبيق، وبالتالي تزيد معدّل نجاح تثبيت التطبيق.
- يحسن حالة النظام بشكل عام، حيث يمكن لعدة تطبيقات مشاركة الخط نفسه من خلال أحد الموفّرين. ويؤدي هذا إلى توفير بيانات شبكة الجوّال وذاكرة الهاتف ومساحة القرص. في هذا النموذج، يتم جلب الخط عبر الشبكة عند الحاجة.
كيف تعمل الخطوط القابلة للتنزيل؟
موفِّر الخطوط هو تطبيق يسترد الخطوط ويخزّنها في ذاكرة التخزين المؤقت محليًا حتى تتمكن التطبيقات الأخرى من طلب الخطوط ومشاركتها. يوضح الشكل التالي هذه العملية.
![صورة تعرض المكونات الرئيسية لعملية التوافق مع الرموز التعبيرية](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/downloadable-fonts/downloadable-fonts-process.png?authuser=7&hl=ar)
الأساسيات
يمكنك استخدام ميزة الخطوط القابلة للتنزيل بالطرق التالية، والتي تمت مناقشتها بالتفصيل في أقسام لاحقة:
استخدام الخطوط القابلة للتنزيل مع "استوديو Android" وخدمات Google Play
يمكنك ضبط تطبيقك لتنزيل الخطوط باستخدام الإصدار Android Studio 3.0 أو الإصدارات الأحدث. لمساعدتك في بدء استخدام ميزات الخطوط القابلة للتنزيل، يمكنك الاستعانة بموفِّر الخطوط من خدمات Google Play.
- في محرِّر التنسيق، اختَر
TextView
. بعد ذلك، ضمن السمات، اختَر fontFamily > مزيد من الخطوط.الشكل 2. باستخدام محرِّر التنسيق - في قائمة المصدر، اختَر خطوط Google.
- في مربع الخطوط، اختَر خطًا ضمن المنطقة "قابل للتنزيل".
- اختَر إنشاء خط قابل للتنزيل وانقر على حسنًا.
الشكل 3. اختيار خط من نافذة الموارد
ينشئ "استوديو Android" تلقائيًا ملفات XML ذات الصلة اللازمة لعرض الخط بشكل صحيح في تطبيقك.
![صورة تعرض كيفية معاينة الخطوط](https://developer.android.com/static/guide/topics/ui/images/look-and-feel/downloadable-fonts/preview-fonts.png?authuser=7&hl=ar)
استخدام الخطوط القابلة للتنزيل آليًا
بدءًا من الإصدار 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 بشكلٍ غير متزامن واستخدامها في تطبيقك. لمزيد من المعلومات، اطّلِع على مستندات إنشاء الخطوط القابلة للتنزيل.