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

首先查看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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容