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

تجربة ميزة "الكتابة"
‫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. معاينة ملف الخط

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

بدءًا من الإصدار 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"

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