استخدام الخطوط القابلة للتنزيل

تجربة طريقة الإنشاء
إنّ Jetpack Compose هي مجموعة أدوات واجهة المستخدم المقترَحة لنظام التشغيل Android. تعرَّف على كيفية استخدام النص في ميزة "إنشاء".

تسمح ميزة "الخطوط القابلة للتنزيل" لواجهات برمجة التطبيقات بطلب الخطوط من تطبيق موفّر خدمة بدلاً من تجميع الملفات في التطبيق أو السماح للتطبيق بتنزيل الخطوط. تتوفّر الخطوط القابلة للتنزيل على الأجهزة التي تعمل بالإصدار 14 من واجهة برمجة تطبيقات Android والإصدارات الأحدث من خلال مكتبة AndroidX Core.

تقدم الخطوط القابلة للتنزيل المزايا التالية:

  • يقلل حجم التطبيق، وبالتالي يزيد من معدل نجاح تثبيت التطبيق.
  • يعمل هذا الإجراء على تحسين حالة النظام بشكل عام، إذ يمكن لعدة تطبيقات مشاركة الخط نفسه من خلال مقدّم خدمة. يوفّر ذلك بيانات شبكة الجوّال للمستخدمين وذاكرة الهاتف ومساحة القرص. وفي هذا النموذج، يتم استرجاع الخط من خلال الشبكة عند الحاجة.
للحصول على تجربة عملية بشأن الخطوط القابلة للتنزيل، اطّلع على نموذج تطبيق DownloadableFonts.

كيف تعمل الخطوط القابلة للتنزيل؟

مزوّد الخطوط هو تطبيق يسترد الخطوط ويخزّنها مؤقتًا محليًا حتى تتمكّن التطبيقات الأخرى من طلب الخطوط ومشاركتها. يوضح الشكل التالي هذه العملية.

صورة تعرض المكوّنات الرئيسية في عملية التوافق مع الرموز التعبيرية
الشكل 1. عملية الخطوط القابلة للتنزيل.

الأساسيّات

يمكنك استخدام ميزة الخطوط القابلة للتنزيل بالطرق التالية، والتي ستتم مناقشتها بالتفصيل في أقسام لاحقة:

استخدام الخطوط القابلة للتنزيل في "استوديو Android" وخدمات Google Play

يمكنك ضبط تطبيقك لتنزيل الخطوط باستخدام الإصدار 3.0 من "استوديو Android" أو إصدار أحدث. لمساعدتك في بدء استخدام ميزات "الخطوط القابلة للتنزيل"، يمكنك استخدام موفّر الخطوط من خدمات Google Play.

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

    صورة تعرض كيفية معاينة الخطوط
    الشكل 4. جارٍ معاينة ملف الخط.

استخدام الخطوط القابلة للتنزيل آليًا

بدءًا من الإصدار Android 8.0 (المستوى 26 من واجهة برمجة التطبيقات)، يوفّر AndroidX Core دعمًا كاملاً للخطوط القابلة للتنزيل. للحصول على مزيد من المعلومات حول استخدام مكتبة AndroidX Core، يمكنك الاطّلاع على قسم مكتبة AndroidX Core القابلة للتنزيل في هذه الصفحة.

لاستخدام ميزة الخطوط القابلة للتنزيل آليًا، تفاعل مع فئتين رئيسيتين:

يسترد تطبيقك الخطوط من مقدّم الخطوط باستخدام واجهة برمجة تطبيقات FontsContract. ولكل مقدّم خدمات مجموعة من القيود الخاصة به على إصدارات Android ولغة طلب البحث التي يتيحها. لمزيد من المعلومات حول إصدارات Android وتنسيق طلبات البحث، يُرجى الرجوع إلى مستندات الموفّر.

لتنزيل خط، أكمل الخطوات التالية:

  1. يمكنك إنشاء مثيل من الفئة 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);
    
  2. أنشئ مثيلاً للفئة FontsContract.FontRequestCallback.
  3. يمكنك إلغاء طريقة onTypefaceRetrieved() للإشارة إلى اكتمال طلب الخط. قدِّم الخط الذي تم استرداده كمَعلمة. يمكنك استخدام هذه الطريقة لضبط الخط حسب الحاجة. على سبيل المثال، يمكنك ضبط الخط على TextView.
  4. يمكنك إلغاء طريقة onTypefaceRequestFailed() لتلقّي معلومات حول الأخطاء في عملية طلب الخط. لمزيد من المعلومات حول رموز الخطأ، راجِع ثوابت رمز الخطأ.
  5. عليك استدعاء الطريقة 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. هذا يعني أنه لا حاجة إلى تجميع الخط كمادة عرض. يمكنك تحديد خط مخصص للمظهر بأكمله، مما يسرّع قابلية الاستخدام مع مختلف الأحجام والأنماط، مثل الغامق أو المتوسط أو الفاتح، عند توفيره.

  1. أنشِئ ملف XML جديدًا في المجلد res/font.
  2. أضِف عنصر جذر <font-family> واضبط السمات المتعلقة بالخط، كما هو موضّح في نموذج ملف XML التالي:
  3. <?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>
    
  4. يمكنك الرجوع إلى الملف بالصيغة @font/font_file_name في ملف XML الخاص بالتنسيق. ويمكنك أيضًا استخدام طريقة getFont() لاسترداد الملف بشكل آلي، مثل getFont(R.font.font_file_name).

التعريف مسبقًا للخطوط في البيان

تضخم التخطيطات واسترداد الموارد مهمتان متزامنتان. بشكل افتراضي، تؤدي المحاولة الأولى لاسترداد الخطوط إلى إرسال طلب إلى موفر الخطوط، وبالتالي تزيد وقت التخطيط الأول. لتجنُّب التأخير، يمكنك الإعلان مسبقًا عن الخطوط التي يجب استردادها في البيان. بعد استرداد النظام للخط من مقدّم الخدمة، يصبح متاحًا على الفور. إذا استغرق استرداد الخط وقتًا أطول من المتوقع، يلغي النظام عملية الجلب ويستخدم الخط التلقائي.

للإعلان مسبقًا عن الخطوط في البيان، أكمِل الخطوات التالية:

  1. أنشِئ مصفوفة موارد بلغة res/values/arrays.xml وحدِّد الخطوط التي تريد جلبها مسبقًا.
  2. 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>
    
  3. استخدِم علامة meta-data لتعريف مصفوفة الموارد في ملف البيان.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
    

إضافة شهادات

إذا لم يكن موفّر الخطوط مثبَّتًا مسبقًا، أو إذا كنت تستخدم مكتبة AndroidX Core، يُرجى توضيح الشهادات التي تم توقيع موفِّر الخطوط معها. يستخدم النظام الشهادات للتحقق من هوية موفِّر الخطوط.

نفِّذ الخطوات التالية لإضافة الشهادات:

  1. أنشِئ مصفوفة سلاسل تتضمّن تفاصيل الشهادة. لمزيد من المعلومات حول تفاصيل الشهادة، راجِع مستندات موفِّر الخطوط.
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
    
  3. اضبط السمة fontProviderCerts على الصفيف.
  4. android:fontProviderCerts="@array/certs"
    

الخطوط القابلة للتنزيل في Compose

بدءًا من Compose 1.2-alpha07، يمكنك استخدام واجهة برمجة تطبيقات Fonts القابلة للتنزيل في تطبيق Compose لتنزيل Google Fonts بشكل غير متزامن واستخدامها في تطبيقك. للحصول على مزيد من المعلومات، راجِع مستندات إنشاء خطوط قابلة للتنزيل.