Android Text Font’u Değiştirme (Calligraphy Font)

Merhaba arkadaşlar,
Mobilhanem.com üzerinden anlattığımız derslerimize, bu dersimizde sizlere Calligraphy kütüphanesini kullanarak Android Text Font ‘u değiştirmeyi anlatacağım. Android uygulama geliştirirken çoğu zaman fontlara ihtiyaç duyarız örneğin bir TextView kullanıyoruz ve içindeki text’in fontunu değiştirmek istiyoruz. İşte o zaman önce ilgili TextView’in id sine erişip tanımlıyoruz daha sonra Typeface fonksiyonu yardımı ile font tipini belirtip, text’in fontunu değiştiriyoruz.

Android’in kendi bileşenlerinde font değiştirme ile ilgili daha kolay bir çözüm bulunmamakta işte bu yüzden hem daha pratik bir çözüm oluşturmak hem de kod fazlalığından kurtulmak için Calligraphy kütüphanesini kullanma gereği duyuyoruz.

Yukarıda bahsettiğim Android’in kendi uzun yönetimi ile font nasıl değiştirilir , font klasörü nasıl oluşturulur uzun uzun anlatmayacağım bu yazımızda var incelemek isterseniz bakabilirsiniz.

Calligraphy kütüphanesini Android Studio da kullanabilmemiz için build.gradle da dependencies kısmına aşağıdaki kod parçasını tanımlıyoruz.

compile 'uk.co.chrisjenx:calligraphy:2.1.0'

Eğer bütün TextView’lerimizde aynı fontu kullanmak yani uygulamanın default fontunu belirlemek istersek Application sınıfımızı oluşturuyoruz. Aşağıdaki kod da gördüğünüz gibi default font olarak Pacifico fontunu belirledik.

FontApplication.java

package com.mobilhanem.textviewfontexample;

import android.app.Application;

import uk.co.chrisjenx.calligraphy.CalligraphyConfig;

/**
 * Created by alperbeyler on 23/03/16.
 */
public class FontApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
             .setDefaultFontPath("fonts/Pacifico.ttc")  // default font
             .setFontAttrId(R.attr.fontPath)
             .build()

        );

    }
}

Yukarıda tanımladığımız application sınıfımızdan sonra kullanmak istediğimiz ilgili Activity’e aşağıdaki sınıfı override ediyoruz.

@Override
    protected void attachBaseContext(Context newBase) {

        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }

Burada anlatılan kısımlarda önemli noktalara değiniyorum kaynak kodu indirip incelediğinizde daha iyi anlayacaksınızdır.

Eğer default olarak tek bir fontu bütün TextView ler için kullanmak istemiyorsak , ayrı ayrı TextView lerimize farklı font lar set etmek istiyorsak yapmamız gereken işlemler çok kolay:

İlgili layout sınıfımızı açıyoruz; fontPath kod parçasını kullanarak hangi fontumuzu kullanmak istiyorsak onu belirliyoruz ve “tools:ignore=”MissingPrefix” kısmını tanımlıyoruz. Eğer sadece fontPath kullanarak ilgili fontu set edersek ; sistem bizi uyaracaktır o yüzden MissingPrefix kısmını unutmayalım.

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"  tools:context=".MainActivity"
    tools:ignore="MissingPrefix"
    >


    <LinearLayout
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true">

        <TextView
            fontPath="fonts/billabong.ttf"
            android:layout_marginBottom="20dp"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="@string/first_info"
            android:id="@+id/first_textView" />

        <TextView
            fontPath="fonts/OswaldBold.ttf"
            android:layout_marginLeft="20dp"
            android:layout_marginRight="20dp"
            android:layout_marginBottom="20dp"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="@string/second_info"
            android:id="@+id/second_textView2" />

        <TextView
            fontPath="fonts/Pacifico.ttf"
            android:layout_marginBottom="20dp"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium"
            android:text="@string/third_info"
            android:id="@+id/third_textView3" />

    </LinearLayout>
</RelativeLayout>

MainActivity sınıfımızda aşağıdadır ve kodlarda gördüğünüz gibi uzun yöntemle yapmak istersek üç tane TextView in fontunu değiştirebilmek için üç tane ayrı fonksiyon oluşturduk.

MainActivity.java

package com.mobilhanem.textviewfontexample;

import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import uk.co.chrisjenx.calligraphy.CalligraphyContextWrapper;

public class MainActivity extends Activity {

    private TextView firstText, secondText, thirdText;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        firstText = (TextView)findViewById(R.id.first_textView);
        //setFontTypeFirst();
        secondText = (TextView)findViewById(R.id.second_textView2);
        //setFontTypeSecond();
        thirdText = (TextView)findViewById(R.id.third_textView3);
        //setFontTypeThird();
    }

    public void setFontTypeFirst(){

        Typeface face= Typeface.createFromAsset(getAssets(), "fonts/billabong.ttf");
        firstText.setTypeface(face);

    }
    public void setFontTypeSecond(){

        Typeface face= Typeface.createFromAsset(getAssets(), "fonts/OswaldBold.ttf");
        secondText.setTypeface(face);
    }
    public void setFontTypeThird(){

        Typeface face= Typeface.createFromAsset(getAssets(), "fonts/Pacifico.ttf");
        thirdText.setTypeface(face);
    }

    @Override
    protected void attachBaseContext(Context newBase) {

        super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
    }
}

 

Evet arkadaşlar gördüğünüz gibi bu kütüphane sayesinde hem daha pratik hem de hızlı bir biçimde yazıların fontunu değiştirebiliyoruz. O yüzden kullanmanızı şiddetle tavsiye ederim, umarım ileriki güncellemelerde font değiştirme ile ilgili böyle pratik çözümler çıkarırlar.

Ders hakkında soru ve önerilerinizi çekinmeden yorum bırakabilirsiniz. Bol Android’li günler sizin olsun, bir dahaki dersime görüşmek üzere 🙂

Tüm Android Ders, Proje ve Kaynak Kodlar için tıklayınız.

Android text font değiştirme
Android text font değiştirme
0

Alper Beyler

Yüksek Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği
Lisans: Çankaya Üniversitesi / Bilgisayar Mühendisliği (4/3.30) (2010-2014)
Lisans : Viyana Teknik Üniversitesi / Bilgisayar Bilimleri (2013)

2 Yorum

  • Merhaba hocam, gerçekten faydalı bir anlatım olmuş bu kütüphane sayesinde çok daha kolaylaştı font değiştirme işim , derslerinizin devamını bekliyorum

  • Merhaba yazı fontu değiştirmeyi kullanıcı isteğine bağlı şekilde yapabiliyormuyuz. Uygulama içi renk tema seçici gibi.

Haftalık Bülten

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