Bundan önce ki yazımız da Java içerisinde tek tek “TextView” üzerinde font değiştirmeye bakmıştık. Bunu yapmak için “Assets” klasörü oluşturmaya bakmıştık. Bu yazımızda “Assets” klasörü oluşturma kısmını atlayacağım. Dilerseniz buradan inceleyebilirsiniz. Bu yazımızda ise “Calligraphy” kütüphanesi ile uygulamamızda varsayılan yazı tipini ve XML içerisinde font değiştirmeye bakacağız.
Öncelikle “Gradle” içerisine kütüphane eklemeyle başlayalım. “app->build.gradle” içerisinde “dependencies” altına ekleyelim.
1 |
compile 'uk.co.chrisjenx:calligraphy:2.1.0' |
Ardından yeni bir Java sınıfı oluşturarak “Application” sınıfını “extends” edeceğiz ve içerisine “Calligraphy” için oluşturma metodunu ile işlemler yapacağız.
Oluşturacağımız sınıfa “AppController.java” diyelim ve “onCreate” içerisinde, “initDefault” metodunu çağıralım.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package com.KemalBakacak.FontsExample; import android.app.Application; import uk.co.chrisjenx.calligraphy.CalligraphyConfig; public class AppController extends Application { @Override public void onCreate() { super.onCreate(); CalligraphyConfig.initDefault(new CalligraphyConfig.Builder() .setDefaultFontPath("fonts/CaveatBrush-Regular.ttf") // Uygulamaya ait default font .setFontAttrId(R.attr.fontPath) // XML içerisinde kullanacağımız keyword. .build() ); } } |
Daha sonra bu oluşturduğumuz sınıfı “AndroidManifest” içerisinde “Launcher” olan “activity” üzerinde “name” olarak veriyoruz.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.KemalBakacak.FontsExample"> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme" android:name=".AppController"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application> </manifest> |
Daha sonra XML içerisinde üst katman içerisine alttaki kodu yazıyoruz ve ön ek yazmaktan kurtuluyoruz.
1 |
tools:ignore="MissingPrefix" |
Ardından kullanacağımız “TextView” için font verebiliriz.
1 |
fontPath="fonts/Pangolin-Regular.ttf" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
<?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:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context="com.KemalBakacak.FontsExample.MainActivity" tools:ignore="MissingPrefix"> <TextView android:id="@+id/tvHelloWorld" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World! – XML Font" android:textSize="30sp" fontPath="fonts/Pangolin-Regular.ttf"/> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello World! - Default Font" android:layout_marginTop="50dp" android:textSize="30sp"/> </RelativeLayout> |
Ardından kullanacağımız her “Activity” içerisinde bir metotu “override” etmemiz gerekmekte.
1 2 3 4 |
@Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase)); } |
Dediğim gibi yukarıda ki metotu her “Activity” sınıfı içerisine yazmamız gerekmektedir. Eğer yazmaksak Android varsayılan font yapısını kullanıyor.
Ekran görüntüsü,
Teşekkürler, görüşmek üzere.
Birden fazla font ekleyip kullanıcının kendisinin font seçmesini nasıl sağlayabiliriz acaba?
Application sınıfını extend ettiğiniz sınıf içerisinde defaultFontPath bir String değer istiyor sizden. Bu durumda sizin bu değeri “SharedPrefences” üzerinde tutabilirsiniz. Bu doğrultuda kullanıcıya uygulamanın her hangi bir yerinde font listesini göstererek oradan bir font seçmesi sonucunda bu font değerini “SharedPreferences” içerisine kaydederek uygulamanın tekrar başlaması durumunda fontu ayarlayabilirsiniz. Burada dikkat etmeniz gereken noktalar ise öncelikle bütün fontlar cihazın içerisinde olmalı. Ek olarak kullanıcıya “CaveatBrush-Regular” şeklinde bir metin göstermeyeceğiniz için bunu bir “key-value” şeklinde tutmanız gerekebilir. Örneğin, “Caveat Brush Normal” metnine karşılık “CaveatBrush-Regular” gibi.