استفاده از قلم‌های بارگیری‌شدنی

امتحان کردن روش Compose
Jetpack Compose جعبه‌ابزار واسط کاربر توصیه‌شده برای Android است. با نحوه استفاده از نوشتار در Compose آشنا شوید.

ویژگی «قلم‌های بارگیری‌شدنی» به میاناهای برنامه‌سازی کاربردی امکان می‌دهد قلم‌ها را از برنامه ارائه‌دهنده درخواست کنند، به‌جای اینکه فایل‌ها را در برنامه بسته‌بندی کنند یا به برنامه اجازه دهند قلم‌ها را بارگیری کند. «قلم‌های بارگیری‌شدنی» در دستگاه‌های دارای Android API نسخه ۱۴ و بالاتر ازطریق کتابخانه AndroidX Core دردسترس است.

«قلم‌های بارگیری‌شدنی» مزایای زیر را ارائه می‌دهد:

  • حجم برنامه را کاهش می‌دهد و درنتیجه نرخ موفقیت نصب برنامه را افزایش می‌دهد.
  • سلامت کلی سیستم را بهبود می‌بخشد، زیرا چند برنامه می‌توانند قلم یکسانی را ازطریق یک ارائه‌دهنده هم‌رسانی کنند. این کار باعث صرفه‌جویی در داده تلفن همراه، حافظه تلفن، و فضای دیسک کاربران می‌شود. در این مدل، قلم درصورت نیاز ازطریق شبکه واکشی می‌شود.
برای تجربه عملی با «قلم‌های بارگیری‌شدنی»، برنامه نمونه DownloadableFonts را ببینید.

«قلم‌های بارگیری‌شدنی» چگونه کار می‌کند؟

ارائه‌دهنده قلم برنامه‌ای است که قلم‌ها را بازیابی می‌کند و آن‌ها را به‌صورت محلی ذخیره می‌کند تا برنامه‌های دیگر بتوانند قلم‌ها را درخواست و هم‌رسانی کنند. شکل زیر این فرایند را نشان می‌دهد.

تصویری که مؤلفه‌های اصلی را در فرایند سازگاری اموجی نشان می‌دهد
شکل ۱. فرایند «قلم‌های بارگیری‌شدنی».

اصول اولیه

می‌توانید از ویژگی «قلم‌های بارگیری‌شدنی» به روش‌های زیر استفاده کنید که در بخش‌های بعدی به‌طور مفصل شرح داده شده است:

استفاده از قلم‌های بارگیری‌شدنی با «استودیو Android» و خدمات Google Play

می‌توانید برنامه‌تان را طوری تنظیم کنید که قلم‌ها را بااستفاده از Android Studio نسخه ۳.۰ یا بالاتر بارگیری کند. برای کمک به شما در شروع کار با ویژگی‌های «قلم‌های بارگیری‌شدنی»، می‌توانید از ارائه‌دهنده قلم از خدمات Google Play استفاده کنید.

  1. در ویرایشگر چیدمان، TextView را انتخاب کنید. سپس، در بخش ویژگی‌ها، fontFamily > قلم‌های بیشتر را انتخاب کنید.
    تصویری که «ویرایشگر چیدمان Android Studio» را نشان می‌دهد
    شکل ۲. استفاده از ویرایشگر چیدمان.
    پنجره منابع ظاهر می‌شود.
  2. در منوِ منبع، Google Fonts را انتخاب کنید.
  3. در چارگوش قلم‌ها، قلمی را در بخش «بارگیری‌شدنی» انتخاب کنید.
  4. ایجاد قلم بارگیری‌شدنی را انتخاب کنید و روی تأیید کلیک کنید.
    تصویری که نحوه انتخاب قلم‌ها از پنجره «منابع» را نشان می‌دهد
    شکل ۳. انتخاب قلم از پنجره منابع.
  5. Android Studio به‌طور خودکار فایل‌های XML مربوطه را که برای ارائه صحیح قلم در برنامه‌تان لازم است تولید می‌کند.

    تصویری که نحوه پیش‌دید قلم‌ها را نشان می‌دهد
    شکل ۴. درحال پیش‌نمایش فایل قلم.

استفاده از «قلم‌های بارگیری‌شدنی» به‌صورت برنامه‌نویسی‌شده

از Android 8.0 (سطح API‏ ۲۶)، AndroidX Core پشتیبانی کامل از «قلم‌های بارگیری‌شدنی» را ارائه می‌دهد. برای اطلاعات بیشتر درباره استفاده از کتابخانه AndroidX Core، به بخش کتابخانه AndroidX Core قلم‌های بارگیری‌شدنی در این صفحه مراجعه کنید.

برای استفاده از ویژگی «قلم‌های بارگیری‌شدنی» به‌صورت برنامه‌نویسی‌شده، با دو کلاس کلیدی تعامل برقرار کنید:

برنامه شما بااستفاده از FontsContract API قلم‌ها را از ارائه‌دهنده قلم بازیابی می‌کند. هر ارائه‌دهنده مجموعه محدودیت‌های خاص خود را درخصوص نسخه‌های Android و زبان پُرسمانی که پشتیبانی می‌کند دارد. برای کسب اطلاعات بیشتر درباره نسخه‌های Android و قالب پُرسمان، به اسناد ارائه‌دهنده‌تان مراجعه کنید.

برای بارگیری قلم، مراحل زیر را تکمیل کنید:

  1. نمونه‌ای از کلاس android.graphics.fonts.FontRequest ایجاد کنید تا قلم را از ارائه‌دهنده درخواست کنید. برای ایجاد درخواست، پارامترهای زیر را ارسال کنید:
    • مرجع ارائه‌دهنده قلم.
    • بسته ارائه‌دهنده قلم برای درستی‌سنجی هویت ارائه‌دهنده.
    • پُرسمان رشته‌ای قلم. برای اطلاعات بیشتر درباره قالب‌های پُرسمان، به اسناد ارائه‌دهنده قلمتان، مثل قلم‌های Google، مراجعه کنید.
    • فهرستی از مجموعه‌های درهم‌سازی برای گواهی‌ها جهت تأیید هویت ارائه‌دهنده.

    کاتلین

    val request = FontRequest(
            "com.example.fontprovider.authority",
            "com.example.fontprovider",
            "my font",
            certs
    )

    جاوا

    FontRequest request = new FontRequest("com.example.fontprovider",
                       "com.example.fontprovider", "my font", certs);
  2. نمونه‌ای از کلاس FontsContract.FontRequestCallback ایجاد کنید.
  3. روش onTypefaceRetrieved() را لغو کنید تا نشان دهید درخواست قلم کامل شده است. قلم بازیابی‌شده را به‌عنوان پارامتر ارائه دهید. می‌توانید از این روش برای تنظیم قلم درصورت نیاز استفاده کنید. برای مثال، می‌توانید قلم را روی TextView تنظیم کنید.
  4. روش onTypefaceRequestFailed() را لغو کنید تا اطلاعات مربوط به خطاهای فرایند درخواست قلم را دریافت کنید. برای اطلاعات بیشتر درباره کدهای خطا، به ثابت‌های کد خطا مراجعه کنید.
  5. برای بازیابی قلم از ارائه‌دهنده قلم، روش FontsContract.requestFont() را فراخوانی کنید. این روش بررسی را برای تعیین اینکه آیا قلم در حافظه پنهان وجود دارد یا نه آغاز می‌کند. اگر قلم به‌صورت محلی دردسترس نباشد، ارائه‌دهنده قلم را فراخوانی می‌کند، قلم را به‌صورت ناهمگام بازیابی می‌کند، و نتیجه را به callback ارسال می‌کند. پارامترهای زیر را ارسال کنید:
    • نمونه‌ای از کلاس Context
    • نمونه‌ای از کلاس android.graphics.fonts.FontRequest
    • یک فراخوانی برای دریافت نتایج درخواست قلم
    • یک گرداننده برای واکشی قلم‌ها در یک رشته

کد نمونه زیر فرایند کلی «قلم‌های بارگیری‌شدنی» را نشان می‌دهد:

کاتلین

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)

جاوا

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 API نسخه ۱۴ یا بالاتر پشتیبانی می‌کند. بسته 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.19.1"
}

کاتلین

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

استفاده از «قلم‌های بارگیری‌شدنی» به‌عنوان منابع در XML

Android 8.0 (سطح میانای برنامه‌سازی کاربردی ۲۶) و 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. در فایل XML چیدمان، به فایل به‌عنوان @font/font_file_name ارجاع دهید. همچنین می‌توانید از روش 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"