Android Downloadable (İndirilebilir) Font Kullanımı (Android 0reo)

Merhaba Arkadaşlar,
Mobilhanem.com sitemiz üzerinden anlattığımız/yayınladığımız Android Eğitimleri yazı serimizde bu dersimizde İndirilebilir Font Kullanımı ile devam ediyoruz.

Bir önceki dersimizide Android 8.0 (Oreo) ile birlikte gelen XML Font Kullanımı‘nı anlatmıştık. Bu dersimizde ise bir diğer özellik olan İndirilebilir(Downloadable) Font Kullanımından bahsedeceğiz.

İndirilebilir Font nasıl çalışır ?

Bir font sağlayıcı yapı düşünün yazı tiplerini saklar ve hızlı erişim için bunu önbellek de tutar. Böylelikle bizler uygulama geliştirirken her seferinde istediğimiz fontu lokalimize indirmek yerine bu font sağlayıcı üzerinden karşılarız. Böylelikle bellekten tasarruf etmiş oluruz.

Aşağıdaki görselde daha net anlayabilirsiniz.

İndirilebilir Font Süreci

İndirilebilir Font Avantajları ?

  • APK Boyutunuzu gereksiz yere arttırmaz.
  • Fontunuzun hatasız bir şekilde yükleme oranını arttırır.
  • Birden fazla APK, bir sağlayıcı aracılığıyla aynı yazı tipini paylaşabildiğinden sağlıklı bir çözüm sunmuş olursunuz. Bu, kullanıcıların hücresel verilerini, telefon belleğini ve disk alanından yer kazandırır. Font gerektiğinde ağ üzerinden getirilir.

Öncelikle Google Play Services 11 veya üzeri bir sürümün bilgisayarınızda yüklü olması laızm. Eğer yüklü değilse SDK Manager -> Android SDK -> SDK Tools dan yükleyebilirsiniz.

İndirilebilir Font Google Play Services

Gerekli herşey hazır ise gelelim nasıl kullanacağımıza.

İndirilebilir Font

TextView tasarlar iken Design sekmesinde sağ tarafta bulunan özelliklerden font family‘i seçiyoruz ve more fonts diyoruz ve karşımıza aşağıdaki gibi bir seçenek çıkıyoruz buradan istediğimiz fontu tonlarıyla birlikte projemize dahil edebiliriz fontu seçtikten sonra OK diyoruz ve Android Studio bize /res/ klasörü altında bir font dosyası oluşturuyor, içerisine de seçmiş olduğumuz fontun nereden sağlandığını gösteren bir xml dosyası atıyor.

Ben Candal fontunu seçtiğim için bu şekilde gelmektedir.

<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto"
        app:fontProviderAuthority="com.google.android.gms.fonts"
        app:fontProviderPackage="com.google.android.gms"
        app:fontProviderQuery="Candal"
        app:fontProviderCerts="@array/com_google_android_gms_fonts_certs">
</font-family>

Deklaratif kullanım bu şekildedir şimdi gelelim Programatik olarak nasıl kullanacağımıza.

Programatik olarak İndirilebilir Font kullanmak için iki sınıfa ihtiyacınız vardır bunlardan biri font isteği oluşturacağınız FontRequest sınıfıdır diğeri ise yeni bir yazı tipi oluşturmanızı sağlayan FontsContract interface’idir.

Uygulamanız FontsContract sınıfını kullanarak font sağlayıcıdan fontları alır. Her sağlayıcı, desteklediği Android sürümleri ve sorgu dili üzerinde kendi kısıtlamalarına sahiptir.

Bir yazı tipini programatik olarak indirmek için şu adımları takip etmeniz gerekmektedir.

  • Yazı tipi sağlayıcı yetkisi.
  • Sağlayıcının kimliğini doğrulamak için yazı tipi sağlayıcı paketi.
  • Fontun sağlaycı sorgusu (Genellikle ismi ve varsa özellikleri bold, italic, vs.) detaylı bilgiyi buradan edinebilirsiniz.
  • Sağlayıcının kimliğini doğrulamak için hash ve set bilgilerinin edinilmesi.

Tüm adımları farkettiyseniz dekralatif kullanımda edinmiştik. (Yukarıda ki paylaştığımız koda bakabilirsiniz.)

FontRequest request = new FontRequest("com.google.android.gms.fonts",
                "com.google.android.gms", "Candal", R.array.com_google_android_gms_fonts_certs);

Yukarıda daha önceden dekllaratif olarak oluşturduğumuz ‘Candal’ fontunu programatik olan istediğini yapmış olduk.

FontsContract.FontRequestCallback callback =
         new FontsContract.FontRequestCallback() {
             @Override
             public void onTypefaceRetrieved(Typeface typeface) {
                 tvFont.setTypeface(typeface);
             }

              @Override
              public void onTypefaceRequestFailed(int reason) {
                  Toast.makeText(MainActivity.this,
                          "Font indirilirken bir hata oluştu.", Toast.LENGTH_LONG)
                          .show();
               }
           };
FontsContract.requestFonts(MainActivity.this, request, callback, getHandlerThreadHandler());

Yapmış olduğumuz isteği yukarıda ki FontsContract interface’in callback fonksiyonu olan onTypefaceRetrieved ile karşılıyoruz ve ilgili TextView’e bağlıyoruz. Eğer bir sorun olursa onTypefaceRequestFailed fonksiyonu ile karşılayabilirsiniz.

Bu dersimiz sonuna gelmiş bulunmaktayız Android 8.0 (Oreo) ile birlikte gelen font kullanımı kısaca bu şekilde deha fazla ayrıntı için buradan yardım alabilirsiniz.

Umarım faydalı olmuştur, bir sonraki dersimizde görüşmek üzere hoşçakalın.

1

Yusuf Çakal

Cumhuriyet Üniversitesi - Bilgisayar Mühendisliği (2014-2018)

3 Yorum

Haftalık Bülten

Mobilhanem'de yayınlanan dersleri haftalık mail almak ister misiniz?