İndirilebilir Yazı Tipleri özelliği, API'lerin dosyaları uygulamaya dahil etmek veya uygulamanın yazı tiplerini indirmesine izin vermek yerine bir sağlayıcı uygulamasından yazı tipi istemesine olanak tanır. İndirilebilir yazı tipleri, AndroidX Core kitaplığı aracılığıyla Android API 14 ve sonraki sürümleri çalıştıran cihazlarda kullanılabilir.
İndirilebilir yazı tipleri şu avantajları sunar:
- Uygulama boyutunu küçülterek uygulama yükleme başarı oranını artırır.
- Birden fazla uygulama bir sağlayıcı aracılığıyla aynı yazı tipini paylaşabildiğinden genel sistem sağlığını iyileştirir. Bu, kullanıcıların hücresel veri kullanımından, telefon belleğinden ve disk alanından tasarruf etmesini sağlar. Bu modelde, yazı tipi gerektiğinde ağ üzerinden getirilir.
İndirilebilir Yazı Tipleri nasıl çalışır?
Yazı tipi sağlayıcı, diğer uygulamaların yazı tiplerini isteyip paylaşabilmesi için yazı tiplerini alıp yerel olarak önbelleğe alan bir uygulamadır. Aşağıdaki şekilde bu işlem gösterilmektedir.
Temel bilgiler
İndirilebilir Yazı Tipleri özelliğini aşağıdaki şekillerde kullanabilirsiniz. Bu şekiller sonraki bölümlerde ayrıntılı olarak açıklanmıştır:
Android Studio ve Google Play Hizmetleri ile İndirilebilir Yazı Tiplerini kullanma
Android Studio 3.0 veya sonraki sürümleri kullanarak uygulamanızı yazı tiplerini indirecek şekilde ayarlayabilirsiniz. İndirilebilir yazı tipleri özelliklerini kullanmaya başlamanıza yardımcı olması için Google Play Hizmetleri'ndeki yazı tipi sağlayıcıyı kullanabilirsiniz.
- Düzen Düzenleyici'de bir
TextView
seçin. Ardından, Özellikler bölümünde fontFamily > Diğer Yazı Tipleri'ni seçin. Kaynaklar penceresi görünür. - Kaynak menüsünde Google Fonts'u seçin.
- Yazı tipleri kutusunda, "İndirilebilir" alanından bir yazı tipi seçin.
- İndirilebilir yazı tipi oluştur'u seçip Tamam'ı tıklayın.
Android Studio, yazı tipinin uygulamanızda doğru şekilde oluşturulması için gereken ilgili XML dosyalarını otomatik olarak oluşturur.
İndirilebilir yazı tiplerini programatik olarak kullanma
AndroidX Core, Android 8.0 (API düzeyi 26) sürümünden itibaren İndirilebilir Yazı Tipleri için tam destek sağlamaktadır. AndroidX Core kitaplığının kullanımı hakkında daha fazla bilgi için bu sayfadaki İndirilebilir Yazı Tipleri AndroidX Core kitaplığı bölümüne bakın.
İndirilebilir Yazı Tipleri özelliğini programatik olarak kullanmak için iki temel sınıfla etkileşime geçin:
android.graphics.fonts.FontRequest
: Bu sınıf, yazı tipi isteği oluşturmanıza olanak tanır.FontsContractCompat
: Bu sınıf, yazı tipi isteğine göre yeni birTypeface
nesnesi oluşturmanıza olanak tanır.
Uygulamanız, FontsContract
API'sini kullanarak yazı tiplerini yazı tipi sağlayıcıdan alır. Her sağlayıcının desteklediği Android sürümleri ve sorgu dili ile ilgili kendi kısıtlamaları vardır. Android sürümleri ve sorgu biçimi hakkında daha fazla bilgi için sağlayıcınızın dokümanlarına bakın.
Bir yazı tipini indirmek için aşağıdaki adımları uygulayın:
- Sağlayıcıdan yazı tipini istemek için
android.graphics.fonts.FontRequest
sınıfının bir örneğini oluşturun. İstek oluşturmak için aşağıdaki parametreleri iletin:- Yazı tipi sağlayıcı yetkilisi.
- Sağlayıcının kimliğini doğrulamak için yazı tipi sağlayıcı paketi.
- Yazı tipinin dize sorgusu. Sorgu biçimleri hakkında daha fazla bilgi için yazı tipi sağlayıcınızın Google Fonts gibi dokümanlarına bakın.
- Sağlayıcının kimliğini doğrulamak için sertifikalara ait karma oluşturma işlemleri gruplarının listesi.
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);
FontsContract.FontRequestCallback
sınıfının bir örneğini oluşturun.- Yazı tipi isteğinin tamamlandığını belirtmek için
onTypefaceRetrieved()
yöntemini geçersiz kılın. Parametre olarak alınan yazı tipini sağlayın. Yazı tipini gerektiği gibi ayarlamak için bu yöntemi kullanabilirsiniz. Örneğin, birTextView
öğesinde yazı tipini ayarlayabilirsiniz. - Yazı tipi isteği işlemindeki hatalar hakkında bilgi almak için
onTypefaceRequestFailed()
yöntemini geçersiz kılın. Hata kodları hakkında daha fazla bilgi için hata kodu sabitlerine bakın. - Yazı tipi sağlayıcıdan yazı tipini almak için
FontsContract.requestFont()
yöntemini çağırın. Yöntem, yazı tipinin önbellekte olup olmadığını belirlemek için bir kontrol başlatır. Yazı tipi yerel olarak kullanılamıyorsa yazı tipi sağlayıcıyı çağırır, yazı tipini eşzamansız olarak alır ve sonucu geri çağırmaya iletir. Aşağıdaki parametreleri iletin:Context
sınıfının bir örneğiandroid.graphics.fonts.FontRequest
sınıfının bir örneği- Yazı tipi isteğinin sonuçlarını almak için geri arama
- Bir ileti dizisindeki yazı tiplerini getirmek için kullanılan işleyici
Aşağıdaki örnek kodda Genel İndirilebilir Yazı Tipleri süreci gösterilmektedir:
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);
Bir yazı tipi sağlayıcısından bir yazı tipini nasıl indireceğiniz hakkında daha fazla bilgi edinmek için DownloadableFonts örnek uygulamasına bakın.
AndroidX Core ile indirilebilir yazı tiplerini kullanma
AndroidX Core, Android API 14 veya sonraki sürümleri çalıştıran cihazlarda İndirilebilir Yazı Tipleri özelliğini destekler. androidx.core.provider
paketi, geriye dönük olarak uyumlu İndirilebilir Yazı Tipleri özelliği desteğini uygulamak için FontsContractCompat
ve FontRequest
sınıflarını içerir. AndroidX sınıfları, çerçeve yöntemlerine benzer yöntemler içerir ve yazı tiplerini indirme işlemi, bu sayfadaki İndirilebilir Yazı Tiplerini programatik olarak kullanma ile ilgili bölümde açıklanan sürece benzer.
AndroidX'i kullanarak yazı tiplerini indirmek için androidx.core.provider
paketinden FontsContractCompat
ve FontRequest
sınıflarını içe aktarın. FontsContract
ve android.graphics.fonts.FontRequest
çerçeve sınıfları yerine bu sınıfların örneklerini oluşturun.
AndroidX Core bağımlılık ekleme
FontsContractCompat
ve FontRequest
sınıflarını kullanmak için uygulama projenizin sınıf yolu bağımlılıklarını geliştirme ortamınızda değiştirmeniz gerekir.
AndroidX Core'u uygulama projenize eklemek için uygulamanızın build.gradle
dosyasına aşağıdaki bağımlılığı ekleyin:
Groovy
dependencies { ... implementation "androidx.core:core-ktx:2.2.0" }
Kotlin
dependencies { ... implementation("androidx.core:core-ktx:2.2.0") }
İndirilebilir yazı tiplerini XML'de kaynak olarak kullanma
Android 8.0 (API düzeyi 26) ve AndroidX Core, XML düzeninde özel bir yazı tipini kaynak olarak belirtmenin daha hızlı ve daha kolay bir yolunu sunar. Bu, yazı tipini bir öğe olarak gruplandırmanıza gerek olmadığı anlamına gelir. Temanızın tamamı için özel bir yazı tipi tanımlayabilirsiniz. Bu özel yazı tipi, sağlandığında kalın, orta veya açık gibi birden fazla ağırlık ve stil için kullanılabilirliği artırır.
res/font
klasöründe yeni bir XML dosyası oluşturun.- Aşağıdaki örnek XML dosyasında gösterildiği gibi bir
<font-family>
kök öğesi ekleyin ve yazı tipiyle ilgili özellikleri ayarlayın: - Dosyaya, sayfa düzeni XML dosyasında
@font/font_file_name
olarak referans verin. Dosyayı programatik olarak almak içingetFont(R.font.font_file_name)
gibigetFont()
yöntemini de kullanabilirsiniz.
<?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>
Yazı tiplerini manifest'te önceden tanımlama
Sayfa oluşturma ve kaynak getirme işlemleri senkronize görevlerdir. Varsayılan olarak, yazı tiplerini ilk alma girişimi, yazı tipi sağlayıcıya bir isteği tetikler ve bu nedenle ilk düzen süresini artırır. Gecikmeyi önlemek için, alınması gereken yazı tiplerini manifest dosyanızda önceden bildirebilirsiniz. Sistem, yazı tipini sağlayıcıdan aldıktan sonra yazı tipi hemen kullanılabilir. Yazı tipi getirme işlemi beklenenden uzun sürerse sistem getirme işlemini iptal eder ve varsayılan yazı tipini kullanır.
Manifest'teki yazı tiplerini önceden bildirmek için aşağıdaki adımları tamamlayın:
res/values/arrays.xml
içinde bir resources dizisi oluşturun ve önceden almak istediğiniz yazı tiplerini bildirin.- Manifest'inizdeki kaynak dizisini bildirmek için bir
meta-data
etiketi kullanın.
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" />
Sertifika ekleme
Bir yazı tipi sağlayıcı önceden yüklü değilse veya AndroidX Core kitaplığını kullanıyorsanız yazı tipi sağlayıcının imzalandığı sertifikaları belirtin. Sistem, yazı tipi sağlayıcının kimliğini doğrulamak için sertifikaları kullanır.
Sertifika eklemek için aşağıdaki adımları uygulayın:
- Sertifika ayrıntılarını içeren bir dize dizisi oluşturun. Sertifika ayrıntıları hakkında daha fazla bilgi edinmek için yazı tipi sağlayıcınızın dokümanlarına bakın.
fontProviderCerts
özelliğini dizi olarak ayarlayın.
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="certs"> <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item> </string-array> </resources>
android:fontProviderCerts="@array/certs"