问题描述
- 如何使用自定义的字体文件?
- 我想使用自定义的字体文件,用的下面的代码:
<?xml version=""1.0"" encoding=""utf-8""?> <LinearLayout xmlns:android=""http://schemas.android.com/apk/res/android"" android:orientation=""vertical"" android:layout_width=""fill_parent"" android:layout_height=""fill_parent"" > <TextView android:id=""@+id/custom_font"" android:layout_width=""fill_parent"" android:layout_height=""wrap_content"" android:text=""This is the Chantelli Antiqua font."" /> </LinearLayout> TextView txt = (TextView) findViewById(R.id.custom_font); Typeface font = Typeface.createFromAsset(getAssets()Chantelli_Antiqua.ttf""); txt.setTypeface(font);
可以正常运行,但是我想在整个程序中使用这个自定义的字体。因此我需要放置在一个所有的类都能使用它的地方。不用为每一个TextView 创建。
如何使用这个custom font, 再放置在哪里?
解决方案
你可以创建一个自定义的 TextView 来继承 TextView 来设置自定义字体。
TextViewPlus.java:
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(TAGCould not get typeface: ""+e.getMessage()); return false; } setTypeface(tf); return true;}
}
attrs.xml:
<?xml version=""1.0"" encoding=""utf-8""?><resources> <declare-styleable name=""TextViewPlus""> <attr name=""customFont"" format=""string""/> </declare-styleable></resources>
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=""Chantelli_Antiqua.ttf""> </com.example.TextViewPlus></LinearLayout>
你要把 ""Chantelli_Antiqua.ttf"" 放在 assets 文件夹中。
时间: 2024-12-25 03:29:02