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

تجربة طريقة 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 إمكانية استخدام ميزة "الخطوط القابلة للتنزيل" على الأجهزة التي تعمل بنظام Android الإصدار 14 من واجهة برمجة التطبيقات أو الإصدارات الأحدث تشير رسالة الأشكال البيانية 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: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

ستبدأ بعد إنشاء 1.2-alpha07 يمكنك استخدام واجهة برمجة تطبيقات الخطوط القابلة للتنزيل في تطبيق Compose لتنزيل استخدام Google Fonts بشكل غير متزامن واستخدامها في تطبيقك بالنسبة مزيد من المعلومات، راجِع وثائق إنشاء الخطوط القابلة للتنزيل