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

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

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

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

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

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

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

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

الأساسيات

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

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

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

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

خطوط قابلة للتنزيل في ميزة "الإنشاء"