İndirilebilir Yazı Tipleri Kullanma

Oluşturma yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da metni nasıl kullanacağınızı öğrenin.

İ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ı tiplerini kullanma deneyimi için DownloadableFonts örnek uygulamasını inceleyin.

İ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.

Emoji uyumluluğu sürecindeki ana bileşenleri gösteren resim
Şekil 1. İndirilebilir yazı tipleri işlemi.

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.

  1. Düzen Düzenleyici'de bir TextView seçin. Ardından, Özellikler bölümünde fontFamily > Diğer Yazı Tipleri'ni seçin.
    Android Studio Düzen Düzenleyicisi'ni gösteren resim
    Şekil 2. Düzen Düzenleyici'yi kullanarak.
    Kaynaklar penceresi görünür.
  2. Kaynak menüsünde Google Fonts'u seçin.
  3. Yazı tipleri kutusunda, "İndirilebilir" alanından bir yazı tipi seçin.
  4. İndirilebilir yazı tipi oluştur'u seçip Tamam'ı tıklayın.
    Kaynaklar penceresinden yazı tiplerinin nasıl seçileceğini gösteren resim
    Şekil 3. Kaynaklar penceresinden bir yazı tipi seçin.
  5. Android Studio, yazı tipinin uygulamanızda doğru şekilde oluşturulması için gereken ilgili XML dosyalarını otomatik olarak oluşturur.

    Yazı tiplerinin nasıl önizleneceğini gösteren resim
    Şekil 4. Yazı tipi dosyasının önizlemesi.

İ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:

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:

  1. 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);
  2. FontsContract.FontRequestCallback sınıfının bir örneğini oluşturun.
  3. 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, bir TextView öğesinde yazı tipini ayarlayabilirsiniz.
  4. 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.
  5. 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ği
    • android.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.

  1. res/font klasöründe yeni bir XML dosyası oluşturun.
  2. 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:
  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. Dosyaya, sayfa düzeni XML dosyasında @font/font_file_name olarak referans verin. Dosyayı programatik olarak almak için getFont(R.font.font_file_name) gibi getFont() yöntemini de kullanabilirsiniz.

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:

  1. res/values/arrays.xml içinde bir resources dizisi oluşturun ve önceden almak istediğiniz yazı tiplerini bildirin.
  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. Manifest'inizdeki kaynak dizisini bildirmek için bir meta-data etiketi kullanın.
  4. <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:

  1. 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.
  2. <?xml version="1.0" encoding="utf-8"?>
    <resources>
        <string-array name="certs">
           <item>MIIEqDCCA5CgAwIBAgIJA071MA0GCSqGSIb3DQEBBAUAMIGUMQsww...</item>
        </string-array>
    </resources>
  3. fontProviderCerts özelliğini dizi olarak ayarlayın.
  4. android:fontProviderCerts="@array/certs"

Oluşturma bölümünde indirilebilir yazı tipleri