Android字体设置-----Typeface解析

本文详细介绍了Android中的Typeface类,包括其基本用法、内置字体样式和如何自定义字体。通过XML和Java代码展示了如何设置字体样式,并提供了加载外部字体的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天在看一个开源项目的时候,发现了一个可以设置字体样式的类Typeface,配合着酷炫的字体,能让UI增色不少,于是便研究一下并做了记录。

Typeface类简介

Typeface中的主要方法和变量都是静态的,类中定义了五种字体以及四种Style样式。

五种字体

public static final Typeface DEFAULT;         //默认的正常字体样式   

public static final Typeface DEFAULT_BOLD;    //默认的正常字体加粗样式。注意:这可能不是真的粗体,取决于安装的字体样式   

public static final Typeface SANS_SERIF;      //无衬线字体的正常样式

public static final Typeface SERIF;           //衬线体字体的正常样式

public static final Typeface MONOSPACE;       //默认单空间字体的标准样式

五种字体样式在手机中的显示是这样的:
这里写图片描述

四种字体风格

 public static final int NORMAL = 0;            //普通样式
 public static final int BOLD = 1;              //字体加粗
 public static final int ITALIC = 2;            //斜体
 public static final int BOLD_ITALIC = 3;       //字体加粗+斜体

这四种style比较常见,理解起来肯定没问题,在就此不上图了。

设置方式

XML中设置字体
android:typeface="normal"  <!--or sans|serif|monospace -->

//如果要设置字体风格
android:textStyle="normal" <!--or bold|italic-->
java代码设置字体的有两种方式:

1.一个参数

源码:

    public void setTypeface(Typeface tf) {
        if (mTextPaint.getTypeface() != tf) {
            mTextPaint.setTypeface(tf); //给绘制TextView的画笔,设置字体属性  

            if (mLayout != null) {
                nullLayouts();
                requestLayout();
                invalidate();
            }
        }
    }

第一种方式:View.setTypeface(Typeface tf)
tf: Typeface对象,把想设置的Typeface传入即可。可以传空对象,如果传空会使用默认的字体

2.两个参数

源码:

 public void setTypeface(Typeface tf, int style) {
        if (style > 0) {
            if (tf == null) {
                tf = Typeface.defaultFromStyle(style);
            } else {
                tf = Typeface.create(tf, style);
            }

            setTypeface(tf);
            // now compute what (if any) algorithmic styling is needed
            int typefaceStyle = tf != null ? tf.getStyle() : 0;
            int need = style & ~typefaceStyle;
            mTextPaint.setFakeBoldText((need & Typeface.BOLD) != 0);
            mTextPaint.setTextSkewX((need & Typeface.ITALIC) != 0 ? -0.25f : 0);
        } else {
            mTextPaint.setFakeBoldText(false);
            mTextPaint.setTextSkewX(0);
            setTypeface(tf);
        }
    }

第二种方式:View.setTypeface(Typeface tf, int style)
tf: Typeface对象,可以传空对象,如果传空会使用默认的字体
style :字体风格 例:Typeface.BOLD_ITALIC ——加粗斜体

引入外部字体样式

  1. 在src/main目录下创建assets文件夹,然后在assets中新建fonts目录用来放字体,字体文件有.ttf和.otf等格式,如图所示:
    这里写图片描述

  2. 在代码中调用:

//实例化TextView
TextView  tv1 = (TextView) findViewById(R.id.tv1);

//得到AssetManager
AssetManager manager = getAssets();

//根据路径得到Typeface
Typeface tf = Typeface.createFromAsset(manager, "fonts/type_face.ttf");

//设置字体
tv1.setTypeface(tf);

成功运行后如图所示,已经变成我自己down的自定义字体了。
这里写图片描述

总结

  • 使用外部字体时,加载的过程中可能因为文件的大小影响App性能;

  • 可以把加载字体放在App启动时候去加载,把Typeface设成static,使用的时候直接调用即可。

  • 关于fount文件里的字体,我们只需要添加我们用到的字体,防止文件太大,APK体积变大或加载过慢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值