İndirilebilir Yazı Tipleri Kullanma

Yazma yöntemini deneyin
Jetpack Compose, Android için önerilen kullanıcı arayüzü araç setidir. Yazma işleminde metni nasıl kullanacağınızı öğ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 sürümü 14 ve sonraki sürümlerin yüklü olduğu cihazlarda kullanılabilir.

İndirilebilir yazı tipleri aşağıdaki avantajları sunar:

  • Uygulama boyutunu küçülterek uygulamanın yüklenme başarı oranını artırır.
  • Birden fazla uygulama, sağlayıcı aracılığıyla aynı yazı tipini paylaşabildiğinden sistemin genel durumu iyileşir. Bu sayede kullanıcılar hücresel veri, telefon belleği ve disk alanından tasarruf edebilir. Bu modelde, yazı tipi gerektiğinde ağ üzerinden getirilir.
İndirilebilir yazı tipleriyle ilgili pratik 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ı tipi isteğinde bulunabilir ve yazı tiplerini paylaşabilir. Aşağıdaki şekilde bu süreç gösterilmektedir.

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

Temel bilgiler

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

Android Studio ve Google Play Hizmetleri ile indirilebilir 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ı olmak 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 kullanma
    Kaynaklar penceresi görünür.
  2. Kaynak menüsünde Google Fonts'u seçin.
  3. Yazı Tipleri kutusunda, "İndirilebilir" alanındaki bir yazı tipini 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ı 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
    4.şekil 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ı 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şimde bulunun:

Uygulamanız, FontsContract API'sini 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 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ı tipi 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 belgelerine (ör. Google Fonts) bakın.
    • Sağlayıcının kimliğini doğrulamak için sertifikaların karma 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. Bu yöntemi kullanarak yazı tipini istediğiniz gibi ayarlayabilirsiniz. Örneğin, yazı tipini TextView olarak 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 konusuna bakın.
  5. Yazı tipini yazı tipi sağlayıcıdan almak için FontsContract.requestFont() yöntemini çağırın. Bu 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ğı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 arama
    • Bir iş parçacığında yazı tiplerini getiren işleyici

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

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 indirilebilir yazı tiplerini kullanma

AndroidX Core, Android API sürümü 14 veya sonraki sürümlerin yüklü olduğu cihazlarda indirilebilir yazı tipleri özelliğini destekler. androidx.core.provider paketi, geriye dönük olarak uyumlu indirilebilir yazı tipi ö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 programatik olarak indirilebilir yazı tiplerini kullanma bölümünde açıklanan işleme benzer.

AndroidX kullanarak yazı tipi indirmek için FontsContractCompat ve FontRequest sınıflarını androidx.core.provider paketinden 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ığını ekleme

FontsContractCompat ve FontRequest sınıflarını kullanmak için geliştirme ortamınızdaki 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:

Groovy

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

Kotlin

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

XML'de indirilebilir yazı tiplerini kaynak olarak kullanma

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

Manifest'te yazı tiplerini önceden bildirme

Düzen şişirme ve kaynak alma işlemleri senkronize görevlerdir. Varsayılan olarak, yazı tiplerini alma işlemi için yapılan ilk deneme, yazı tipi sağlayıcıya bir istek gönderir ve bu nedenle ilk düzenleme süresini artırır. Gecikmeyi önlemek için manifestinizde alınması gereken yazı tiplerini önceden bildirebilirsiniz. Sistem, sağlayıcıdan yazı tipini aldıktan sonra yazı tipi hemen kullanılabilir. Yazı tipi alma işlemi beklenenden uzun sürerse sistem getirme işlemini iptal eder ve varsayılan yazı tipini kullanır.

Manifest dosyasında 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 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

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ı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 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 dizi olarak ayarlayın.
  4. android:fontProviderCerts="@array/certs"

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