ویژگی فونتهای دانلودی به APIها اجازه میدهد به جای اینکه فایلها را در برنامه دستهبندی کنند یا به برنامه اجازه دانلود فونتها را بدهند، فونتها را از یک برنامه ارائهدهنده درخواست کنند. فونتهای دانلودی در دستگاههای دارای Android API نسخه ۱۴ و بالاتر از طریق کتابخانه AndroidX Core در دسترس است.
فونت های دانلودی مزایای زیر را ارائه می دهد:
- اندازه برنامه را کاهش می دهد، بنابراین نرخ موفقیت نصب برنامه را افزایش می دهد.
- سلامت کلی سیستم را بهبود می بخشد، زیرا چندین برنامه می توانند فونت یکسانی را از طریق یک ارائه دهنده به اشتراک بگذارند. این باعث صرفه جویی در داده های تلفن همراه، حافظه تلفن و فضای دیسک کاربران می شود. در این مدل فونت در صورت نیاز از طریق شبکه واکشی می شود.
فونت های دانلودی چگونه کار می کنند؟
ارائهدهنده فونت برنامهای است که فونتها را بازیابی میکند و آنها را به صورت محلی ذخیره میکند تا سایر برنامهها بتوانند فونتها را درخواست کرده و به اشتراک بگذارند. شکل زیر فرآیند را نشان می دهد.
اصول اولیه
میتوانید از ویژگی فونتهای دانلودی به روشهای زیر استفاده کنید، که در بخشهای بعدی به تفصیل مورد بحث قرار خواهند گرفت:
- استفاده از Android Studio و Google Play Services
- به صورت برنامه ای
- با استفاده از کتابخانه AndroidX Core
از فونت های دانلودی با Android Studio و سرویس های Google Play استفاده کنید
با استفاده از Android Studio 3.0 یا بالاتر می توانید برنامه خود را طوری تنظیم کنید که فونت ها را بارگیری کند. برای کمک به شروع کار با ویژگیهای فونتهای قابل دانلود، میتوانید از ارائهدهنده فونت سرویسهای Google Play استفاده کنید.
- در ویرایشگر Layout ، یک
TextView
انتخاب کنید. سپس در قسمت Attributes ، fontFamily > More Fonts را انتخاب کنید. پنجره Resources ظاهر می شود. - در منوی منبع ، فونت های Google را انتخاب کنید.
- در کادر Fonts ، یک فونت را در قسمت "دانلود" انتخاب کنید.
- ایجاد فونت قابل دانلود را انتخاب کرده و OK را کلیک کنید.
Android Studio بهطور خودکار فایلهای XML مربوطه را تولید میکند که برای نمایش صحیح فونت در برنامه شما مورد نیاز است.
از فونت های دانلودی به صورت برنامه نویسی استفاده کنید
از Android 8.0 (سطح API 26)، AndroidX Core پشتیبانی کامل از فونت های دانلودی را ارائه می دهد. برای اطلاعات بیشتر در مورد استفاده از کتابخانه AndroidX Core، به بخش کتابخانه فونت های دانلودی AndroidX Core در این صفحه مراجعه کنید.
برای استفاده برنامهنویسی از ویژگی فونتهای دانلودی، با دو کلاس کلیدی تعامل داشته باشید:
-
android.graphics.fonts.FontRequest
: این کلاس به شما امکان می دهد درخواست فونت ایجاد کنید. -
FontsContractCompat
: این کلاس به شما امکان می دهد یک شیTypeface
جدید بر اساس درخواست فونت ایجاد کنید.
برنامه شما با استفاده از FontsContract
API فونت ها را از ارائه دهنده فونت بازیابی می کند. هر ارائه دهنده مجموعه ای از محدودیت های خاص خود را بر روی نسخه های اندروید و زبان پرس و جو پشتیبانی می کند. برای اطلاعات بیشتر در مورد نسخه های اندروید و فرمت پرس و جو، به مستندات ارائه دهنده خود مراجعه کنید.
برای دانلود فونت مراحل زیر را انجام دهید:
- یک نمونه از کلاس
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);
- یک نمونه از کلاس
FontsContract.FontRequestCallback
ایجاد کنید. - روش
onTypefaceRetrieved()
را نادیده بگیرید تا نشان دهید درخواست فونت کامل شده است. فونت بازیابی شده را به عنوان پارامتر ارائه کنید. می توانید از این روش برای تنظیم فونت در صورت نیاز استفاده کنید. به عنوان مثال، می توانید فونت را رویTextView
تنظیم کنید. - روش
onTypefaceRequestFailed()
را نادیده بگیرید تا اطلاعات مربوط به خطاهای فرآیند درخواست فونت را دریافت کنید. برای اطلاعات بیشتر در مورد کدهای خطا، به ثابت کد خطا مراجعه کنید. - برای بازیابی فونت از ارائه دهنده فونت، متد
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 ارائه میدهند. این بدان معنی است که نیازی به بسته بندی فونت به عنوان یک دارایی نیست. میتوانید یک فونت سفارشی برای کل موضوع خود تعریف کنید، که در صورت ارائه، قابلیت استفاده برای وزنها و سبکهای مختلف مانند پررنگ، متوسط یا روشن را تسریع میکند.
- یک فایل XML جدید در پوشه
res/font
ایجاد کنید. - یک عنصر ریشه
<font-family>
اضافه کنید و ویژگی های مربوط به فونت را همانطور که در نمونه فایل XML زیر نشان داده شده است تنظیم کنید: - در فایل XML layout به فایل به نام
@font/font_file_name
مراجعه کنید. همچنین می توانید از متدgetFont()
برای بازیابی فایل به صورت برنامه نویسی استفاده کنید، مانندgetFont(R.font.font_file_name)
.
<?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>
فونت ها را از قبل در مانیفست اعلام کنید
تورم طرح و بازیابی منابع وظایف همزمان هستند. بهطور پیشفرض، اولین تلاش برای بازیابی فونتها، درخواستی را به ارائهدهنده فونت راهاندازی میکند و بنابراین زمان طرحبندی اول را افزایش میدهد. برای جلوگیری از تاخیر، می توانید فونت هایی را که باید در مانیفست خود بازیابی شوند، از قبل اعلام کنید. پس از اینکه سیستم فونت را از ارائه دهنده بازیابی کرد، فورا در دسترس است. اگر بازیابی فونت بیش از حد انتظار طول بکشد، سیستم فرآیند واکشی را متوقف می کند و از فونت پیش فرض استفاده می کند.
برای از پیش اعلام کردن فونت ها در مانیفست، مراحل زیر را انجام دهید:
- یک آرایه منابع در
res/values/arrays.xml
ایجاد کنید و فونت هایی را که می خواهید از قبل واکشی کنید، اعلام کنید. - از یک تگ
meta-data
برای اعلام آرایه منبع در مانیفست خود استفاده کنید.
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>
<meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />
گواهی ها را اضافه کنید
وقتی یک ارائهدهنده فونت از قبل نصب نشده است، یا اگر از کتابخانه AndroidX Core استفاده میکنید، گواهیهایی را که ارائهدهنده فونت با آن امضا کرده است، اعلام کنید. سیستم از گواهی ها برای تأیید هویت ارائه دهنده فونت استفاده می کند.
برای افزودن گواهینامه مراحل زیر را انجام دهید:
- یک آرایه رشته ای با جزئیات گواهی ایجاد کنید. برای اطلاعات بیشتر در مورد جزئیات گواهی، به مستندات ارائه دهنده فونت خود مراجعه کنید.
- ویژگی
fontProviderCerts
را روی آرایه تنظیم کنید.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"