首先查看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.pngAndroid自定义字体设置
1.typeface、fontFamily、textStyle介绍
1.typeface 字体
typeface 枚举类型,值如下
- normal(默认字体)
- sans (无衬线字体)
- serif(有衬线字体)
- monospace(等宽字体)
sans
和serif
的区别如上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.png2.设置
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):第一个参数含义是设置字体类型,第二个参数的含义是设置字体风格。
网友评论