参考:
1. 自定义字体
1.android Typeface使用TTF字体文件设置字体
我们可以将ttf字体文件放入程序中,并使用Typeface在程序中设置字体。
第一步,在assets目录下新建一个fonts目录手机字体设计,将ttf字体文件放在这里。
第二步吉祥物设计,在程序中调用:
AssetManager mgr=getAssets();//获取AssetManager
Typeface tf=Typeface.createFromAsset(mgr,"fonts/ttf.ttf");//根据路径获取Typeface
tv=findViewById(R.id.textview);
tv.setTypeface(tf);//设置字体
2、在xml文件中使用android:textStyle="bold"可以将英文设置为粗体,但中文不能设置为粗体。
设置中文为粗体的方法是:
TextView tv = (TextView)findViewById(R.id.TextView01);
tv.getPaint().setFakeBoldText(true);//中文仿“粗体”–使用TextPaint的仿“粗体”设置setFakeBoldText为true。
注意:某些字体在中文中无效。 虽然不会报错,但是对于中文来说是无效的。
一.背景
这次尽量写得简单,不要废话。
二、分析
2.1. 字体在文件系统中的位置:
/system/fonts/ 里面的ttf文件都是源码的字体文件 /frameworks/data/fonts/
DroidSans-Bold.ttf 粗体无衬线字体(拉丁字母等)
DroidSans.ttf 常规无衬线字体(拉丁字母等)
DroidSansFallback.ttf 常规无衬线字体(汉字等,一般换字体时都会替换这个文件)
DroidSansMono.ttf 等宽无衬线字体(拉丁字母等)
DroidSerif-Bold.ttf 粗体衬线字体(拉丁字母等)
DroidSerif-BoldItalic.ttf 粗体 + 斜体衬线字体(拉丁字母等)
DroidSerif-Italic.ttf 斜体衬线字体(拉丁字母等)
DroidSerif-Regular.ttf 常规衬线字体(拉丁字母等)
Clockopia.ttf(显示数字时钟时使用的字体,可选)
Frameworks/fonts/下有3个xml文件,分别是fallback_fonts.xml、system_fonts.xml和vendor_fonts.xml。 前两个最终被编译到系统中。
有两种方法可以更改字体。 一是强制替换系统默认字体,即将要替换的字体重命名为DroidSansFallback.ttf,并替换/system/fonts/下原来的字体。 另一种方法是定义供应商
fonts xml方法,对于我们来说,第一种方法太暴力,没有选择。所以第二种方法比较可行
蛮力替换法我就不说了。 现在我们来说一下厂家字体的方法:
2.2.供应商字体方法:
假设您要添加 XXXXX.ttf 格式的字体文件:
按照android用例vendor_fonts.xml文件中注释中描述的方法在/vendor/etc/目录下创建fallback_fonts.xml,例如
XXXXX.ttf
family order代表插入的供应商字体需要替换的位置,即/system/etc/fallback_fonts.xml中描述的第10个family(从0开始),即DroidSansFallback.ttf。 使用此方法之前您还需要将“XXXXX.ttf”复制到/system/fonts
三。 总结:
这次就不废话了,但是我想提醒大家,大多数字体库都是有版权的,所以在使用别人的字体库之前一定要小心。 这就是为什么Android不再在“设置”中添加字体选择栏的原因。 如果你用了没交保护费就买了别人的字体,花了大价钱买了产品的话,哈哈,律师信估计已经在路上了。
———————————-
修改Android字体续集:修改4.0字体(ICS)
本文根据我去年的博客《网上所有方法都过时了!》 一种字体可以处理Android上的英文、中文、日文和韩文的显示,你知道的! “添加。 原文章讲的是2.0中字体文件的使用。
4.x之后最显着的变化是Roboto家族的加入,它有四种变体:Regular/Bold/Italic/BoldItalic。 与原来的DroidSans相比,它多了两个斜体。 原来的 DroidSans 家族仍然存在,但已指向 Roboto 家族。 修改原文件无效。
由于中文字体中没有独立斜体和独立粗斜体,因此建议您分别替换中文和英文。 这样可以保证英文有斜体和粗体斜体,同时有更多的中英文独立组合。
为了替换英文字体,我们需要准备四种字体(很多字体都有独立的斜体,很容易找到)分别替换以下四个文件:
Roboto-Regular.ttf
Roboto-Italic.ttf
Roboto-Bold.ttf
Roboto-BoldItalic.ttf
更换的前期准备和操作说明请参见文章开头引用的日志。
对于中文来说,4.x 仍然是 DroidSansFallback.ttf 补全。 某些固件可能被命名为 DroidSansFallbackFull.ttf。 简而言之,最大的就是我们需要更换的。 我个人对字体要求很高,中日韩文字也喜欢使用独立的粗体字体。 因此,我进一步探索了独立粗体字体,结果如下。
使用RootExplorer进入“/System/etc”目录,找到“fallback_fonts.xml”文件。 这是4.x之后新语言的配置文件。 可以用记事本打开进行修改。 熟悉Linux的朋友一定会熟悉这个文件结构,它定义了字体家族和不同的变体。 我们可以发现中国、日本、韩国仍然有下面这行编码:
DroidSansFallback.ttf
也就是说,系统没有为我们准备粗体文本。 不要灰心,我们在文件开头发现了粗体的语句:
DroidSansHebrew-Regular.ttf
DroidSansHebrew-Bold.ttf
这是希伯来语,谷歌为其创建了单独的粗体字体。 我们按照上面的语句,在DroidSansFallback.ttf后面添加新的一行:
DroidSansFallback-Bold.ttf
节省。 使用RootExplorer覆盖原目录下的同名文件并设置权限。
然后将我们需要的常规中文字体和粗体字体分别命名为DroidSansFallback.ttf和DroidSansFallback-Bold.ttf,覆盖原来的字体,并设置覆盖字体和新添加的DroidSansFallback-Bold.ttf的权限。 按照我上一篇教程进行修改。
此项工作完成后,可以重启查看效果。 这样就保证了英文被替换,中文被加粗,这对于字体控制者来说是顺眼的。
当然,上面的fallback_fonts.xml理论上可以无限增加字体家族。 比如我刚刚替换的字体只有中文和日文(很多字体没有韩文)。 稍后我将定义新的系列,例如 DroidSansKorean.ttf 和 DroidSansKorean-Bold.ttf(根据您的意愿命名),然后添加新字体。 理论上,你可以继续回退。 是的,fallback的顺序是由fallback_fonts.xml中的上下顺序决定的。
由于手机空间有限,我没有尝试验证上述假设。 有兴趣的网友可以自己尝试一下。
效果和之前的教程基本一样,只是没有图解。 我希望您谅解。
————————————————–
实际操作:
修改字体相关文件后,需要重启机器或者重启Android,即在adb shell中输入stop;start。
1.根据网上资料,可以在DroidSansFallback.ttf中添加该字体,理论上会在flash、air(基于air开发的apk)、网页等中显示。
事实上,不再显示非自制字符。 后来在/system/etc/fallback_fonts.xml中看到如下注释:
大概意味着字体文件中的字体总数不能超过64K,大字体文件后面的字体文件(如DroidSansFallback.ttf)可能无法正常显示。
我们尝试将自制字体添加到DroidSansFallback.ttf中,导致文件增大到8M以上。 原本只有4M多。 结果手机字体设计,很多文字无法显示。
这与直接删除 DroidSansFallback.ttf 效果相同。
2.基于以上原因,改为使用小字体文件,其中仅包含自制字体。 测试使用的自制字体文件大约1M。
添加文件/vendor/etc/fallback_fonts.xml,格式参考/system/etc/fallback_fonts.xml,具体内容如下:
diy.ttf
将字体文件diy.ttf推送到/system/fonts/,order="14"指的是/system/etc/fallback_fonts.xml,并确保顺序在DroidSansFallback.ttf之前。
但测试结果仍然不好。 网页、flash、air中的自建字体无法显示。 不知道是哪里出了问题,还是系统不支持。
3、以上方法不行。 我打算直接修改/system/etc/fallback_fonts.xml卡通人物,在DroidSansFallback.ttf前面添加:
diy.ttf
DroidSansFallback.ttf
您还需要将 diy.ttf 推送到 /system/fonts/。 此时网页、flash中的自创字可以正常显示,但空中的自创字无法显示。
4.将自制字体添加到Roboto-Regular.ttf中:
将自制字体模板添加到/system/fonts/Roboto-Regular.ttf中,重启机器,air和flash中的自制字体就可以正常显示了。 但网页中的自制文字无法显示。
5、根据实验结果,需要同时使用两种方法:
A。 添加字体文件/system/fonts/diy.ttf并相应修改/system/etc/fallback_fonts.xml;
b. 将自己创建的字体添加到/system/fonts/Roboto-Regular.ttf。
这样网页、flash、air就都正常显示了。
其他知识:
系统字体必须放在/system/fonts/下,并且要使用的字体必须在/system/etc/system_fonts.xml和/system/etc/fallback_fonts.xml中配置。
系统首先从system_fonts.xml中列出的字体中搜索字体,然后从fallback_fonts.xml中搜索。
如果您需要粗体和斜体字体也显示自己创建的字符,请将字体模板添加到以下文件中。
Roboto-Italic.ttf
Roboto-Light.ttf
Roboto-LightItalic.ttf
Roboto-Regular.ttf
Roboto-Thin.ttf
Roboto-ThinItalic.ttf
这次是在android 4.2的机器上操作的。 系统字体列表如下:
AndroidClock.ttf
AndroidClock_Highlight.ttf
AndroidClock_Solid.ttf
AndroidEmoji.ttf
AnjaliNewLipi-light.ttf
Clockopia.ttf
DroidNaskh-Regular.ttf
DroidNaskh-Regular-SystemUI.ttf
DroidSansArmenian.ttf
DroidSansDevanagari-Regular.ttf
DroidSansEthiopic-Regular.ttf
DroidSansFallback.ttf
DroidSansGeorgian.ttf
DroidSansHebrew-Bold.ttf
DroidSansHebrew-Regular.ttf
DroidSansMono.ttf
DroidSansTamil-Bold.ttf
DroidSansTamil-Regular.ttf
DroidSansThai.ttf
DroidSerif-Bold.ttf
DroidSerif-BoldItalic.ttf
DroidSerif-Italic.ttf
DroidSerif-Regular.ttf
Lohit-Bengali.ttf
Lohit-Kannada.ttf
Lohit-Telugu.ttf
MTLmr3m.ttf
NanumGothic.ttf
Roboto-Bold.ttf
Roboto-BoldItalic.ttf
RobotoCondensed-Bold.ttf
RobotoCondensed-BoldItalic.ttf
RobotoCondensed-Italic.ttf
RobotoCondensed-Regular.ttf
Roboto-Italic.ttf
Roboto-Light.ttf
Roboto-LightItalic.ttf
Roboto-Regular.ttf
Roboto-Thin.ttf
Roboto-ThinItalic.ttf
————————————————– ——————-
有四种表现形式:正常; 斜体; 大胆的; 加粗斜体。
Android系统中,DroidSans是默认字体,只包含西文字符(英文),应用程序会默认调用它; 而 Droid Sans Fallback 包含东亚字符(繁体中文、简体中文、韩语、日语)。 当需要显示的字符在Droid Sans字体中不存在(比如汉字),即没有对应的编码字符时,系统会在Droid Sans Fallback中寻找对应的编码字符。 如果找到,将使用 Droid Sans Fallback 字体来显示它们。 如果仍未找到该编码对应的字符,则系统无法在屏幕上显示该字符。 同时,DroidSansFallback.ttf字体文件大小仅为3.04MB,效果与微软雅黑字体类似,而且完全免费。
- 本文固定链接: https://wen.nuanque.com/ziti/21140.html
- 转载请注明: nuanquewen 于 吉祥物设计/卡通ip设计/卡通人物设计/卡通形象设计/表情包设计 发表
- 文章或作品为作者独立观点不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。本文之内容为用户主动投稿和用户分享产生,如发现内容涉嫌抄袭侵权,请联系在线客服举报,一经查实,本站将立刻删除。本站转载之内容为资源共享、学习交流之目的,请勿使用于商业用途。