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

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

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

توفّر ميزة "الخطوط القابلة للتنزيل" المزايا التالية:

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

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

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

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

الأساسيات

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

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

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

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

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

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

اعتبارًا من الإصدار 8.0 من نظام التشغيل Android (المستوى 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:1.19.1"
}

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:1.19.1")
}

استخدام الخطوط القابلة للتنزيل كموارد في 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"