İndirilebilir Yazı Tipleri Kullanma

Compose yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Compose'da metin kullanmayı öğrenin.

İndirilebilir Yazı Tipleri özelliği, API'lerin dosyaları uygulamaya paketlemek 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 durumunu iyileştirir. Bu sayede kullanıcılar hücresel veri, telefon belleği ve disk alanından tasarruf eder. Bu modelde yazı tipi, gerektiğinde ağ üzerinden getirilir.
İndirilebilir Yazı Tipleri ile ilgili uygulamalı deneyim için DownloadableFonts örnek uygulamasına bakın.

İndirilebilir Yazı Tipleri nasıl çalışır?

Yazı tipi sağlayıcı, yazı tiplerini alıp yerel olarak önbelleğe alan bir uygulamadır. Böylece diğer uygulamalar yazı tiplerini isteyip paylaşabilir. Aşağıdaki şekilde bu süreç gösterilmektedir.

Emoji uyumluluğu sürecindeki ana bileşenleri gösteren resimler
Şekil 1. İndirilebilir Yazı Tipleri işlemi.

Temel özellikler

İndirilebilir Yazı Tipleri özelliğini aşağıdaki şekillerde kullanabilirsiniz. Bu yöntemler sonraki bölümlerde ayrıntılı olarak ele alınmıştır:

Android Studio ve Google Play Hizmetleri ile İndirilebilir Yazı Tipleri'ni 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 Layout Editor'ı gösteren bir resim
    Şekil 2. Düzenleyici'yi kullanma
    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
    3.şekil Kaynaklar penceresinden bir yazı tipi seçme.
  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ı önizleniyor.

İndirilebilir Yazı Tipleri'ni programatik olarak kullanma

Android 8.0 (API düzeyi 26) itibarıyla AndroidX Core, İndirilebilir Yazı Tipleri için tam destek sunar. AndroidX Core kitaplığını kullanma 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şim kurun:

Uygulamanız, FontsContract API'yi kullanarak yazı tipi sağlayıcıdan yazı tiplerini alır. Her sağlayıcının, desteklediği Android sürümleri ve sorgu diliyle 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 belgelerine bakın.

Yazı tipi 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 Fonts) belgelerine bakın.
    • Sağlayıcının kimliğini doğrulamak için sertifikaların karma değer kümelerinin 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. Alınan yazı tipini parametre olarak sağlayın. Yazı tipini gerektiği gibi ayarlamak için bu yöntemi kullanabilirsiniz. Örneğin, TextView üzerinde yazı tipini ayarlayabilirsiniz.
  4. Yazı tipi isteği 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 sabitleri bölümüne 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 mevcut değilse 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 bir geri çağırma
    • Yazı tiplerini bir ileti dizisinde getiren işleyici

Aşağıdaki örnek kod, İndirilebilir Yazı Tipleri sürecinin tamamını 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);

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 İndirilebilir Yazı Tipleri'ni 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 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ı tipi indirme işlemi, bu sayfadaki İndirilebilir Yazı Tipleri'ni programatik olarak kullanma bölümünde açıklanan işleme benzer.

AndroidX 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ığı ekleme

FontsContractCompat ve FontRequest sınıflarını kullanmak için geliştirme ortamınızda uygulama projenizin sınıf yolu bağımlılıklarını 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:

Modern

dependencies {
    ...
    implementation "androidx.core:core-ktx:1.19.1"
}

Kotlin

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

İndirilebilir yazı tiplerini XML'de kaynak olarak kullanma

Android 8.0 (API düzeyi 26) ve AndroidX Core, özel bir yazı tipini XML düzeninde kaynak olarak tanımlamanın daha hızlı ve kolay bir yolunu sunar. Bu sayede, yazı tipini öğe olarak paketlemeniz gerekmez. Temanızın tamamı için özel bir yazı tipi tanımlayabilirsiniz. Bu sayede, kalın, orta veya ince gibi birden fazla ağırlık ve stil için kullanılabilirlik artar.

  1. res/font klasöründe yeni bir XML dosyası oluşturun.
  2. Bir <font-family> kök öğesi ekleyin ve aşağıdaki örnek XML dosyasında gösterildiği gibi 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. Düzen XML dosyasında dosyaya @font/font_file_name olarak referans verin. Dosyayı programatik olarak almak için getFont() yöntemini de kullanabilirsiniz (ör. getFont(R.font.font_file_name)).

Yazı tiplerini manifest dosyasında önceden bildirme

Düzen şişirme ve kaynak alma, eşzamanlı görevlerdir. Varsayılan olarak, yazı tiplerini alma yönündeki ilk girişim, yazı tipi sağlayıcıya bir istek gönderilmesini tetikler ve bu nedenle ilk düzen süresini artırır. Gecikmeyi önlemek için manifest dosyanızda alınması gereken yazı tiplerini önceden bildirebilirsiniz. Sistem, yazı tipini sağlayıcıdan aldıktan sonra hemen kullanılabilir. Yazı tipinin alınması beklenenden uzun sürerse sistem, alma işlemini iptal eder ve varsayılan yazı tipini kullanır.

Yazı tiplerini manifest dosyasında önceden beyan etmek için aşağıdaki adımları uygulayın:

  1. res/values/arrays.xml içinde bir kaynak dizisi oluşturun ve önceden getirmek istediğiniz yazı tiplerini tanımlayın.
  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ızda kaynak dizisini bildirmek için meta-data etiketini kullanın.
  4. <meta-data android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" />

Sertifika ekleme

Yazı tipi sağlayıcı önceden yüklenmemişse veya AndroidX Core kitaplığını kullanıyorsanız yazı tipi sağlayıcının imzalandığı sertifikaları beyan edin. 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 için yazı tipi sağlayıcınızın belgelerine 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 diziye ayarlayın.
  4. android:fontProviderCerts="@array/certs"