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

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

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

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

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

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

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

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

الأساسيات

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

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

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

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