android加载第三方字体的方法与效率
2015-10-28 10:16
459 查看
使用第三方字体有三种方法:
1.重写TextView控件:在内部改字体 (缺点:多了就很卡)
public void setTypeface(Typeface tf, int style) {
if (style == Typeface.BOLD) {
super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/YourCustomFont_Bold.ttf"));
} else {
super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/YourCustomFont.ttf"));
}
}
2.用迭代递归View root,把要改字体的控件都找出来改 (第一次加载比较久,而且如果用了Fragment时,里面的字修改不了)
public static void applyFont(final Context context, final View root, final String fontName) {
try {
if (root instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) root;
for (int i = 0; i < viewGroup.getChildCount(); i++)
applyFont(context, viewGroup.getChildAt(i), fontName);
} else if (root instanceof TextView)
((TextView) root).setTypeface(Typeface.createFromAsset(context.getAssets(), fontName));
} catch (Exception e) {
Log.e(TAG, String.format("Error occured when trying to apply %s font for %s view", fontName, root));
e.printStackTrace();
}
}
3.在Application里面加载出字体,然后在自定义TextView中直接用(加载速度最快)
@Override
public void onCreate() {
// 加载自定义字体
try{
TEXT_TYPE = Typeface.createFromAsset(getAssets(),"front/fz.TTF");
}catch(Exception e){
Log.i("MyApp","加载第三方字体失败。") ;
TEXT_TYPE = null ;
}
super.onCreate();
}
自定义TextView中:
@Override
public void onCreate() {
// 加载自定义字体
try{
TEXT_TYPE = Typeface.createFromAsset(getAssets(),"front/fz.TTF");
}catch(Exception e){
Log.i("MyApp","加载第三方字体失败。") ;
TEXT_TYPE = null ;
}
super.onCreate();
}
1.重写TextView控件:在内部改字体 (缺点:多了就很卡)
public void setTypeface(Typeface tf, int style) {
if (style == Typeface.BOLD) {
super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/YourCustomFont_Bold.ttf"));
} else {
super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "fonts/YourCustomFont.ttf"));
}
}
2.用迭代递归View root,把要改字体的控件都找出来改 (第一次加载比较久,而且如果用了Fragment时,里面的字修改不了)
public static void applyFont(final Context context, final View root, final String fontName) {
try {
if (root instanceof ViewGroup) {
ViewGroup viewGroup = (ViewGroup) root;
for (int i = 0; i < viewGroup.getChildCount(); i++)
applyFont(context, viewGroup.getChildAt(i), fontName);
} else if (root instanceof TextView)
((TextView) root).setTypeface(Typeface.createFromAsset(context.getAssets(), fontName));
} catch (Exception e) {
Log.e(TAG, String.format("Error occured when trying to apply %s font for %s view", fontName, root));
e.printStackTrace();
}
}
3.在Application里面加载出字体,然后在自定义TextView中直接用(加载速度最快)
@Override
public void onCreate() {
// 加载自定义字体
try{
TEXT_TYPE = Typeface.createFromAsset(getAssets(),"front/fz.TTF");
}catch(Exception e){
Log.i("MyApp","加载第三方字体失败。") ;
TEXT_TYPE = null ;
}
super.onCreate();
}
自定义TextView中:
@Override
public void onCreate() {
// 加载自定义字体
try{
TEXT_TYPE = Typeface.createFromAsset(getAssets(),"front/fz.TTF");
}catch(Exception e){
Log.i("MyApp","加载第三方字体失败。") ;
TEXT_TYPE = null ;
}
super.onCreate();
}
相关文章推荐
- android:visibility
- 【转】android Apk打包过程概述_android是如何打包apk的
- android 默认签名 debug签名
- Android判断当前的android设备是否处于联网状态
- Android中的PopupWindow详解
- Android中的定时器AlarmManager
- Android利用Collections.sort()对Map里的键值对按照键进行排序,让listview按序显示
- cordova开发环境搭建
- Android提供的LruCache类简介
- Android 开发者,你真的会用textview(maxEms和maxLength)的属性吗?
- Android判断当前的android设备是否处于联网状态
- Xamarin只言片语3——Xamarin.Android下支付宝(Alipay SDK)使用
- Xamarin只言片语3——Xamarin.Android下支付宝(Alipay SDK)使用
- 获取*.jks签名的方法(Android studio)
- AndroidStudio下加入百度地图的使用 (三)——API基本方法及常量属性
- GitHub上找到一个ViewPager项目,导入AndroidStudio一直报错Cause: org/gradle/api/publication/maven/internal/DefaultMa
- Android RelativeLayout常用属性介绍
- 《Android开发开放平台》
- Android开发——对sdcard扩展卡文件操作
- android项目导包问题的解决方案