본문 바로가기

개발도구/aOS - 안드로이드 개발

[안드로이드] custom font xml 적용하기

펌) http://blog.naver.com/PostView.nhn?blogId=sungho0459&logNo=40147285896


외부 폰트를 적용 방법 3가지 

1.TextView 재정의.

2.attrs.xml 작성

3.main.xml 적용

 

1.TextView 재정의.

외부 폰트를 XML에서 사용하려면 기존 TextView를 새롭게 정의할 필요가 있습니다.

 

package com.example;

import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;

public class TextViewPlus extends TextView {
   
private static final String TAG = "TextView";

   
public TextViewPlus(Context context) {
       
super(context);
   
}

   
public TextViewPlus(Context context, AttributeSet attrs) {
       
super(context, attrs);
        setCustomFont
(context, attrs);
   
}

   
public TextViewPlus(Context context, AttributeSet attrs, int defStyle) {
       
super(context, attrs, defStyle);
        setCustomFont
(context, attrs);
   
}

   
private void setCustomFont(Context ctx, AttributeSet attrs) {
       
TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus);
       
String customFont = a.getString(R.styleable.TextViewPlus_customFont);
        setCustomFont
(ctx, customFont);
        a
.recycle();
   
}

   
public boolean setCustomFont(Context ctx, String asset) {
       
Typeface tf = null;
       
try {
        tf
= Typeface.createFromAsset(ctx.getAssets(), asset);  
       
} catch (Exception e) {
           
Log.e(TAG, "Could not get typeface: "+e.getMessage());
           
return false;
       
}

        setTypeface
(tf);  
       
return true;
   
}

}

여기서 중요한것은 패키지 명과 재정의를 한 Class 네임과 재정의 메소드의 내부입니다.

setCoustomFont내부 소스에서 처음보는 TextViewPlus_customFont는 나중에 attrs.xml 파일의 내용입니다.

Class네임은 당연히 TextViewPlus.java가 되겠죠?

패키지명은 main.xml에서 쓰이게 됩니다.

 

2.attrs.xml

 

<?xml version="1.0" encoding="utf-8"?>
<resources>
   
<declare-styleable name="TextViewPlus">
       
<attr name="customFont" format="string"/>
   
</declare-styleable>
</resources>

TextViewPlus태그의 'customFont'속성 구조를 새로 정의하였습니다.

 

3.main.xml

 

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns
:android="http://schemas.android.com/apk/res/android"
    xmlns
:foo="http://schemas.android.com/apk/res/com.example"
    android
:orientation="vertical" android:layout_width="fill_parent"
    android
:layout_height="fill_parent">

   
<com.example.TextViewPlus
        android
:id="@+id/textViewPlus1"
        android
:layout_height="match_parent"
        android
:layout_width="match_parent"
        android
:text="@string/showingOffTheNewTypeface"
        foo
:customFont="saxmono.ttf">
   
</com.example.TextViewPlus>
</LinearLayout>

xmlns로 패키지 장소를 추가해서 우리가 만든 TextViewPlus의 customFont 속성을 추가할 수 있게 만들어줍니다.

기존 TextView가 아닌 우리가 정의한 TextViewPlus를 사용하기 위해서는 패키지 명까지 같이 적어주셔야 합니다. 'com.example.TextViewPlus'

그리고 attrs.xml에서 정의한 속성 customFont를 xmlns을 이용하여 연결해서 사용합니다.