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

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

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

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

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

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

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

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

الأساسيات

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

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

يمكنك ضبط تطبيقك لتنزيل الخطوط باستخدام الإصدار Android Studio 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: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 القابلة للتنزيل في تطبيق Compose لتنزيل Google Fonts بشكلٍ غير متزامن واستخدامها في تطبيقك. لمزيد من المعلومات، اطّلِع على مستندات إنشاء الخطوط القابلة للتنزيل.