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

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

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

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

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

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

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

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

الأساسيات

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

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

يمكنك ضبط تطبيقك على تنزيل الخطوط باستخدام الإصدار 3.0 من Android Studio أو إصدار أحدث. لمساعدتك في بدء استخدام ميزات Downloadable Fonts، يمكنك استخدام موفّر الخطوط من "خدمات 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 في تطبيقك:

Groovy

dependencies {
    ...
    implementation "androidx.core:core-ktx:1.16.0"
}

Kotlin

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

استخدام الخطوط القابلة للتنزيل كموارد في XML

يوفّر الإصدار 8.0 من نظام التشغيل Android (المستوى 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