美文网首页
377,android 开发用代码编写TextView的font

377,android 开发用代码编写TextView的font

作者: 枫叶1234 | 来源:发表于2021-01-10 07:58 被阅读0次

    首先查看android系统中的支持的字体


    截屏2020-12-15 下午2.00.37.png

    alias别名
    如:<alias name="sans-serif-thin" to="sans-serif" weight="100" />

    “sans-serif” weight为100的别名为scans-serif-thin

    Serif和Sans-serif字体的区别

    截屏2020-12-15 下午2.34.50.png 截屏2020-12-15 下午2.34.59.png

    Android自定义字体设置

    1.typeface、fontFamily、textStyle介绍

    1.typeface 字体

    typeface 枚举类型,值如下
    • normal(默认字体)
    • sans (无衬线字体)
    • serif(有衬线字体)
    • monospace(等宽字体)

    sansserif的区别如上sans就是Sans Serif

    monospace 介绍:

    打字机体虽然也属于Sans Serif,但由于是等宽字体,所以另外独立出Monospace这一种类
    monospace (等宽字体):指每个字符宽度都一样。优点容易对齐,经常用来显示代码。

    2.fontFamily 字型家族

    什么是字型家族?它和typeface 的区别?要想了解首先得了解下什么是 typeface、font
    typeface:字体,是一个抽象的总体概念(它是一款“设计”),例如:宋体、楷体
    font:是指特定尺寸、特定字重、字偶间距等信息的一种 Typeface 的具体实现
    fontFamily 是font的一个集合

    使用提示可知 fontFamily 值如下
    • sans-serif
    • sans-serif-condensed
    • sans-serif-smallcaps
    • serif
    • serif-monospace
    • monospace
    • casual
    • cursive
    3.textStyle 字体样式
    textStyle 标记类型,值如下
    • normal(默认字体)这边就是直接默认的字体,没有添加任何修饰
    • bold (加粗)
    • italic(斜体)
    4.三者关系

    查看TextView源码(API 27)可知:TextView构造方法大致如下

    public TextView(Context context,AttributeSet attrs,int defStyleAttr,int defStyleRes) {
        ...
        setTypefaceFromAttrs(fontTypeface, fontFamily, typefaceIndex, styleIndex);
        ...
    }
    

    setTypefaceFromAttrs方法

    /**
     * 
     * @param fontTypeface 要设置的 Typeface
     * @param familyName 要设置的 fontFamily
     * @param typefaceIndex 要设置的 typeface
     * @param styleIndex 要设置的 style
     */
    private void setTypefaceFromAttrs(Typeface fontTypeface,String familyName,
                                        int typefaceIndex,int styleIndex) {
        Typeface tf = fontTypeface;
        if (tf == null && familyName != null) {
            // 有fontFamily时,用fontFamily
            tf = Typeface.create(familyName, styleIndex);
        } else if (tf != null && tf.getStyle() != styleIndex) {
            tf = Typeface.create(tf, styleIndex);
        }
        if (tf != null) {
            setTypeface(tf);
            return;
        }
        switch (typefaceIndex) {
            case SANS:
                tf = Typeface.SANS_SERIF;
                break;
        
            case SERIF:
                tf = Typeface.SERIF;
                break;
        
            case MONOSPACE:
                tf = Typeface.MONOSPACE;
                break;
        }
        // 其它都用typeface
        setTypeface(tf, styleIndex);
     }
    
    总结:
    1.typeface、fontFamily:都是设置字体,都设置时优先使用 fontFamily。
    2.textStyle:设置字体的样式

    2.设置自定义字体

    方式1:直接设置

    1.把字体ttf文件放到assets/fonts目录下,没有此目录手动创建


    image.png

    2.设置

    Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/aa.ttf");
    textView.setTypeface(typeface);
    

    方式3:fontFamily设置

    1.把字体ttf文件放到res/fonts目录下,没有此目录手动创建或使用Android studio创建

    image.png

    2.设置

    1.TextView设置
    android:fontFamily="@font/aa"
    2.activity、application样式里设置
    <item name="android:fontFamily">@font/aa</item>
    

    3.兼容
    因为 fontFamily API16 新增,所以要使用低版本的兼容库 com.android.support:appcompat-v7:26.0.0 以上

    1.TextView设置
    app:fontFamily="@font/aa"
    2.activity、application样式里设置
    <item name="fontFamily">@font/aa</item>
    
    截屏2020-12-14 上午11.29.51.png 截屏2020-12-14 下午2.22.01.png 截屏2020-12-14 上午11.29.07.png

    常用的系统字体

    常用的字体类型名称有:

    • Typeface.DEFAULT //常规字体类型

    • Typeface.DEFAULT_BOLD //黑体字体类型

    • Typeface.MONOSPACE //等宽字体类型

    • Typeface.SANS_SERIF //sans serif字体类型

    • Typeface.SERIF //serif字体类型

    除了字体类型设置之外,还可以为字体类型设置字体风格,如设置粗体:

    常用的字体风格名称还有:

    • Typeface.BOLD //粗体
    • Typeface.BOLD_ITALIC //粗斜体
    • Typeface.ITALIC //斜体
    • Typeface.NORMAL //常规

    TextView quehuo = (TextView)findViewById(R.id.quehuo);//为TextView显示的字体设置样式
    quehuo.setTypeface(Typeface.SANS_SERIF, Typeface.ITALIC);
    上面的代码中setTypeface一共有两种形式:

    1、只设置字体类型:setTypeface(Typeface tf):参数的含义是设置字体类型

    2、setTypeface(Typeface tf,int style):第一个参数含义是设置字体类型,第二个参数的含义是设置字体风格。

    参考:https://www.jianshu.com/p/a1a485eecf80?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

    相关文章

      网友评论

          本文标题:377,android 开发用代码编写TextView的font

          本文链接:https://www.haomeiwen.com/subject/bhkwgktx.html