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

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

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

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

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

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

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

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

الأساسيات

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

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

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

  1. في أداة تعديل التنسيق، اختَر TextView. بعد ذلك، ضمن السمات، اختر fontFamily > المزيد من الخطوط.
    صورة تعرض "أداة تعديل التنسيق" في "استوديو Android"
    الشكل 2. استخدام أداة تعديل التنسيق
    تظهر نافذة الموارد.
  2. في قائمة المصدر ، اختَر خطوط Google.
  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:1.18.0"
}

Kotlin

dependencies {
    ...
    implementation("androidx.core:core-ktx:1.18.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