İndirilebilir Yazı Tipleri Kullanma

Oluşturma yöntemini deneyin
Android için önerilen kullanıcı arayüzü araç seti Jetpack Compose'dur. Oluştur'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 aşağıdaki 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 sayede kullanıcılar hücresel veri, telefon belleği ve disk alanı tasarrufu 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 süreç gösterilmektedir.

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

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:

İndirilebilir yazı tiplerini Android Studio ve Google Play Hizmetleri ile 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üzenleyici'yi 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çin ve 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ı tipini uygulamanızda doğru şekilde oluşturmak 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ı önizleme.

İndirilebilir yazı tiplerini programatik olarak kullanma

Android 8.0 (API düzeyi 26) itibarıyla AndroidX Core, indirilebilir yazı tipleri için tam destek sunar. 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 (ör. Google Yazı Tipleri) belgelerine 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 öğesinin yazı tipini ayarlayabilirsiniz.
  4. Yazı tipi istek sürecindeki 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ı tipini yazı tipi sağlayıcıdan almak için FontsContract.requestFont() yöntemini çağırın. Yöntem, yazı tipinin önbellekte bulunup bulunmadığı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 asenkron olarak alır ve sonucu geri çağırma işlevine 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 çağırma işlevi
    • Bir ileti dizisindeki yazı tiplerini getiren işleyici

Aşağıdaki örnek kod, indirilebilir yazı tipleri sürecini genel olarak göstermektedir:

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ıdan yazı tipi indirme hakkında daha fazla bilgi 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 sayfada indirilebilir yazı tiplerini programatik olarak kullanma ile ilgili bölümde açıklanan işleme 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ı geliştirme ortamınızda değiştirilmelidir.

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 nedenle, yazı tipini öğe olarak paketlemeniz gerekmez. Temanızın tamamı için özel bir yazı tipi tanımlayabilirsiniz. Bu, sağlandığında kalın, orta veya ince gibi birden fazla ağırlık ve stil için kullanılabilirliği hızlandı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() yöntemini de kullanabilirsiniz. Örneğin, getFont(R.font.font_file_name).

Yazı tiplerini manifest'te önceden tanımlama

İçerik oluşturma ve kaynak getirme işlemleri senkronize görevlerdir. Varsayılan olarak, yazı tiplerini almayla ilgili ilk deneme yazı tipi sağlayıcıya bir istek gönderir ve bu nedenle ilk düzen süresi artar. 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.

Yazı tiplerini manifest dosyasında ö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 dosyanızdaki kaynak dizisini bildirmek için 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