İndirilebilir Yazı Tipleri Kullanma

"Oluştur" 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ı uygulamada gruplandırmak veya uygulamanın yazı tiplerini indirmesine izin vermek yerine bir sağlayıcı uygulamasından yazı tipleri istemesini sağlar. İndirilebilir Fonts, Android API 14 ve sonraki sürümünü çalıştıran cihazlarda AndroidX Core kitaplığı aracılığıyla kullanılabilir.

İndirilebilir Yazı Tipleri şu avantajları sunar:

  • Uygulama boyutunu küçülterek uygulamanın yükleme başarı oranını artırır.
  • Birden fazla uygulama, bir sağlayıcı aracılığıyla aynı yazı tipini paylaşabileceği için 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 konusunda uygulamalı deneyim için DownloadableFonts örnek uygulamasına bakın.

İ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 karşılaştırma işlemindeki ana bileşenleri gösteren resimler
Şekil 1. İndirilebilir yazı tipleri işlemi.

Temel bilgiler

İndirilebilir Yazı Tipleri özelliğini, daha sonraki bölümlerde ayrıntılı olarak açıklanacak olan aşağıdaki şekillerde kullanabilirsiniz:

Android Studio ve Google Play Hizmetleri'nde İndirilebilir Yazı Tiplerini kullanma

Android Studio 3.0 veya sonraki bir sürümü kullanarak uygulamanızı yazı tipleri 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ısını 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 kullanma.
    Kaynaklar penceresi görünür.
  2. Kaynak menüsünde Google Fonts'u seçin.
  3. Yazı tipleri kutusundaki "İndirilebilir" alanının altı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ı 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ı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ı kullanma hakkında daha fazla bilgi için bu sayfadaki İndirilebilir Fonts 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şimde bulunun:

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

Bir yazı tipi indirmek için aşağıdaki adımları tamamlayı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 kullanılan 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 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. 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 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 sabit değerlerine bakın.
  5. Yazı tipi sağlayıcıdan yazı tipini almak için FontsContract.requestFont() yöntemini çağırın. Bu yöntem, yazı tipinin önbellekte mevcut 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 yazı tipi indirme hakkında daha fazla bilgi için DownloadableFonts örnek uygulamasına bakın.

AndroidX Core'da İndirilebilir Yazı Tiplerini Kullanma

AndroidX Core, Android API 14 veya sonraki sürümünü çalıştıran cihazlarda İndirilebilir Yazı Tipleri özelliği için destek sağlar. 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ı tiplerini indirme işlemi, bu sayfadaki İndirilebilir Yazı Tiplerini programatik olarak kullanma ile ilgili bölümde açıklanan sürece benzer.

Yazı tiplerini AndroidX kullanarak indirmek için androidx.core.provider paketindeki 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ığı ekleyin

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:

Eski

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 kullanın

Android 8.0 (API düzeyi 26) ve AndroidX Core, özel bir yazı tipini XML düzeninde kaynak olarak bildirmenin 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. Düzen XML dosyasında dosyaya @font/font_file_name olarak bakın. Dosyayı programatik olarak almak için getFont() yöntemini de (ör. getFont(R.font.font_file_name)) kullanabilirsiniz.

Manifest'teki yazı tiplerini önceden bildir

Düzen genişletme ve kaynak alma eşzamanlı 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 manifestinizde alınması gereken yazı tiplerini önceden bildirebilirsiniz. Sistem, yazı tipini sağlayıcıdan aldıktan sonra hemen kullanılabilir. Yazı tipi alma işlemi beklenenden daha 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 kaynak dizisi oluşturun ve önceden getirmek 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 ekle

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ı bildirin. Sistem, yazı tipi sağlayıcısı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ıyla bir dize dizisi oluşturun. Sertifika ayrıntıları hakkında daha fazla bilgi 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 diziye ayarlayın.
  4. android:fontProviderCerts="@array/certs"
    

Compose'daki İndirilebilir Yazı Tipleri

Compose 1.2-alpha07 sürümünden itibaren Google Fonts'u eşzamansız olarak indirmek ve uygulamanızda kullanmak için Compose uygulamanızdaki İndirilebilir Fonts API'yi kullanabilirsiniz. Daha fazla bilgi için İndirilebilir Yazı Tipleri Oluşturma belgelerine bakın.