Android(安卓)中使用自定义字体的方法
16lz
2021-01-25
- 使用Android系统默认支持的三种字体”sans”, “serif”, “monospace”
<?xml version="1.0" encoding="utf-8"?><TableLayout xmlns:Android="http://schemas.android.com/apk/res/android" Android:layout_width="fill_parent" Android:layout_height="fill_parent" > <TableRow> <TextView Android:layout_marginRight="4px" Android:text="sans:" Android:textSize="20sp" > </TextView> <!-- 使用默认的sans字体 --> <TextView Android:id="@+id/sans" Android:text="Hello,World" Android:textSize="20sp" Android:typeface="sans" > </TextView> </TableRow> <TableRow> <TextView Android:layout_marginRight="4px" Android:text="serif:" Android:textSize="20sp" > </TextView> <!-- 使用默认的serifs字体 --> <TextView Android:id="@+id/serif" Android:text="Hello,World" Android:textSize="20sp" Android:typeface="serif" > </TextView> </TableRow> <TableRow> <TextView Android:layout_marginRight="4px" Android:text="monospace:" Android:textSize="20sp" > </TextView> <!-- 使用默认的monospace字体 --> <TextView Android:id="@+id/monospace" Android:text="Hello,World" Android:textSize="20sp" Android:typeface="monospace" > </TextView> </TableRow> <!-- 这里没有设定字体,我们将在Java代码中设定 --> <TableRow> <TextView Android:layout_marginRight="4px" Android:text="custom:" Android:textSize="20sp" > </TextView> <TextView Android:id="@+id/custom" Android:text="Hello,World" Android:textSize="20sp" > </TextView> </TableRow></TableLayout>
- 对单个控件使用自定义字体,通过ID查找到View,然后挨个为它们设置字体
// 得到TextView控件对象TextView textView = (TextView) findViewById(R.id.custom);// 将字体文件保存在assets/fonts/目录下,www.linuxidc.com创建Typeface对象Typeface typeFace = Typeface.createFromAsset(getAssets(),"fonts/DroidSansThai.ttf");// 应用字体textView.setTypeface(typeFace);
- 为每个文本组件创建一个子类,如TextView、Button等,然后在构造函数中加载自定义字体
public class BrandTextView extends TextView { public BrandTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); } public BrandTextView(Context context, AttributeSet attrs) { super(context, attrs); } public BrandTextView(Context context) { super(context); } 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")); } } }
/** * 只需要将标准的文本控件替换成你自定义的就可以了(例如BrandTextView替换TextView) */<com.your.package.BrandTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="View with custom font"/><com.your.package.BrandTextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:textStyle="bold" android:text="View with custom font and bold typeface"/>
另外,还可以直接在XML中添加自定义的字体属性。要实现这个,你需要定义你自己的declare-styleable属性,然后在组件的构造函数中解析它们。参照自定义控件属性。
- 如果想对整个界面的所有控件都应用自定义字体,可以:
ckage arui.blog.csdn.net; import android.app.Activity; import android.graphics.Typeface; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; public class FontManager { public static void changeFonts(ViewGroup root, Activity act) { Typeface tf = Typeface.createFromAsset(act.getAssets(), "fonts/xxx.ttf"); for (int i = 0; i < root.getChildCount(); i++) { View v = root.getChildAt(i); if (v instanceof TextView) { ((TextView) v).setTypeface(tf); } else if (v instanceof Button) { ((Button) v).setTypeface(tf); } else if (v instanceof EditText) { ((EditText) v).setTypeface(tf); } else if (v instanceof ViewGroup) { changeFonts((ViewGroup) v, act); } } } }
changeFonts()方法里面有个参数是ViewGroup,可以通过下面的方法获取:
public static ViewGroup getContentView( Activity act ){ ViewGroup systemContent = (ViewGroup) act.getWindow().getDecorView().findViewById( android.R.id.content ); ViewGroup content = null; if ( systemContent.getChildCount() > 0 && systemContent.getChildAt( 0 ) instanceof ViewGroup ) { content = (ViewGroup) systemContent.getChildAt( 0 ); } return(content);}
参考文章:
1.http://www.cnblogs.com/brainy/archive/2012/05/30/2526538.html#2832068
2.http://ryanhoo.github.io/blog/2014/05/05/android-better-way-to-apply-custom-font/
更多相关文章
- Android(2.Activity初步)
- android Java代码设置textview的字体资源颜色
- Android(安卓)-- 资源使用和总结经验分享
- android window 一些属性说明
- Android(安卓)- 基于Toolbar的Navigation Drawer(Material Desig
- Android可拖拽布局ConstraintLayout
- Binary XML file line #11: You must supply a layout_width att
- android4.0 禁止横竖屏切换使用
- Android(安卓)View动画开发笔记