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