Android 使用第三方字体

         首先得有第三方字体库,这里的字体库文件是black_simplified.TTF,在Android Assert目录下新建front文件夹,并将字体库文件放在front目录下面,即/Assert/front/black_simplified.TTF 

         这里来总结下怎样在应用中使用第三方字体才是最简便的。以TextView为例,API接口中有一个方法叫做setTypeface(Typeface obj),这就是设置TextView显示的字体样式的接口,那么怎样得到Typeface对象呢,查看API后可以由Typeface.creatFromAssert(obj)方式来获取。

               由于Android中可以显示字体的控件还有很多,如Button、EditText。Android开发中常常需要实现自己的Application对象,因为它是全局的,也是程序最先执行的模块,也便于数据共享,所以,初始化字体的操作就放在我们自定义的Application子类MyApp中。代码片段如下:

在MyApp.java的onCreate函数中初始化自定义的typeface:

import android.app.Application;
import android.graphics.Typeface;
import android.util.Log;

public class MyApp extends Application {
	public static Typeface TEXT_TYPE ;
	
	@Override
	public void onCreate() {
		// 加载自定义字体
		try{
		    TEXT_TYPE = Typeface.createFromAsset(getAssets(),
                      "fronts/black_simplified.TTF"); 
		}catch(Exception e){
			Log.i("MyApp","加载第三方字体失败。") ;
			TEXT_TYPE = null ;
		}
		super.onCreate();
	}
}

在AndroidManifest.xml文件中的中注明name属性为自定义的Application子类:

自定义TextView:

import android.content.Context;
import android.util.AttributeSet;
import android.widget.TextView;

public class MyFrontTextView extends TextView {

	public MyFrontTextView(Context context) {
		super(context);
		setTypeface() ;
	}
	
	public MyFrontTextView(Context context, AttributeSet attrs) {
		super(context, attrs);
		setTypeface() ;
	}
	
	public MyFrontTextView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		setTypeface() ;
	}
	
	private void setTypeface(){
		// 如果自定义typeface初始化失败,就用原生的typeface
		if(MyApp.TEXT_TYPE == null){
			setTypeface(getTypeface()) ;
		}else{
			setTypeface(MyApp.TEXT_TYPE) ;
		}
	}
}

Layout文件中需要引用自定义的TextView:


    

大概就是这样的,如果是Button或其他控件需要使用第三方字体,也是同样的道理。

public class MainActivity extends Activity {
	private TextView mTv ;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		mTv = (TextView)findViewById(R.id.tv1) ;
		mTv.setText("Android程序开发") ;
	}
}

 

 

 

 

 

 

 

你可能感兴趣的:(工具类,androidUI,Android细节)