펌) 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을 이용하여 연결해서 사용합니다.