از فونت های دانلودی استفاده کنید

روش نوشتن را امتحان کنید
Jetpack Compose ابزار رابط کاربری پیشنهادی برای اندروید است. یاد بگیرید که چگونه از متن در Compose استفاده کنید.

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

فونت‌های قابل دانلود مزایای زیر را ارائه می‌دهند:

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

فونت‌های قابل دانلود چگونه کار می‌کنند؟

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

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

اصول اولیه

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

استفاده از فونت‌های قابل دانلود با اندروید استودیو و سرویس‌های گوگل پلی

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

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

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

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

از اندروید ۸.۰ (سطح API ۲۶)، AndroidX Core پشتیبانی کامل از فونت‌های قابل دانلود را ارائه می‌دهد. برای اطلاعات بیشتر در مورد استفاده از کتابخانه AndroidX Core، به بخش فونت‌های قابل دانلود کتابخانه AndroidX Core در این صفحه مراجعه کنید.

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

  • android.graphics.fonts.FontRequest : این کلاس به شما امکان می‌دهد یک درخواست فونت ایجاد کنید.
  • FontsContractCompat : این کلاس به شما امکان می‌دهد بر اساس درخواست فونت، یک شیء Typeface جدید ایجاد کنید.

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

برای دانلود فونت، مراحل زیر را انجام دهید:

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

    کاتلین

    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() را فراخوانی کنید. این متد بررسی می‌کند که آیا فونت در حافظه پنهان (cache) وجود دارد یا خیر. اگر فونت به صورت محلی در دسترس نباشد، ارائه‌دهنده فونت را فراخوانی می‌کند، فونت را به صورت ناهمگام بازیابی می‌کند و نتیجه را به تابع فراخوانی (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) از ویژگی فونت‌های قابل دانلود (Downloadable Fonts) در دستگاه‌هایی که از نسخه‌های ۱۴ یا بالاتر اندروید 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.17.0"
}

کاتلین

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

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

اندروید ۸.۰ (سطح API ۲۶) و 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. یک آرایه منابع (resources array) در 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