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

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

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

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

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

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

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

تصاویری که اجزای اصلی در فرآیند Emoji compat را نشان می دهد
شکل 1. فرآیند فونت های قابل دانلود.

اصول اولیه

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

از فونت های دانلودی با Android Studio و سرویس های Google Play استفاده کنید

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

  1. در ویرایشگر Layout ، یک TextView انتخاب کنید. سپس در قسمت Attributes ، fontFamily > More Fonts را انتخاب کنید.
    تصویری که ویرایشگر طرح‌بندی Android Studio را نشان می‌دهد
    شکل 2. با استفاده از ویرایشگر Layout .
    پنجره Resources ظاهر می شود.
  2. در منوی منبع ، فونت های Google را انتخاب کنید.
  3. در کادر Fonts ، یک فونت را در قسمت "دانلود" انتخاب کنید.
  4. ایجاد فونت قابل دانلود را انتخاب کرده و OK را کلیک کنید.
    تصویری که نحوه انتخاب فونت ها را از پنجره Resources نشان می دهد
    شکل 3. انتخاب یک فونت از پنجره Resources .
  5. Android Studio به‌طور خودکار فایل‌های XML مربوطه را تولید می‌کند که برای نمایش صحیح فونت در برنامه شما مورد نیاز است.

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

از فونت های دانلودی به صورت برنامه نویسی استفاده کنید

از Android 8.0 (سطح API 26)، AndroidX Core پشتیبانی کامل از فونت های دانلودی را ارائه می دهد. برای اطلاعات بیشتر در مورد استفاده از کتابخانه AndroidX Core، به بخش کتابخانه فونت های دانلودی AndroidX Core در این صفحه مراجعه کنید.

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

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

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

  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() را فراخوانی کنید. این روش یک بررسی را برای تعیین اینکه آیا فونت در حافظه پنهان وجود دارد یا خیر آغاز می کند. اگر فونت به صورت محلی در دسترس نباشد، با ارائه‌دهنده فونت تماس می‌گیرد، فونت را به‌صورت ناهمزمان بازیابی می‌کند و نتیجه را به پاسخ تماس می‌دهد. پارامترهای زیر را پاس کنید:
    • نمونه ای از کلاس 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:2.2.0"
}

کاتلین

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

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

Android 8.0 (سطح API 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. در فایل XML layout به فایل به نام @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"
    

فونت های قابل دانلود در Compose