android系统内置字体

android 系统本身内置了一些字体,可以在程序中使用,并且支持在xml配置textView的时候进行修改字体的样式。支持字段为android:textStyle ,android:typeface, android:fontFamily,系统内置了normal|bold|italic三种style, 内置了normal,sans,serif,monospace,几种字体(实测这几种字体仅英文有效),typace和fontFamily功能一样。

使用自定义的字体

以上的方式可以改变字体的样式,还不是真正的自定义。android系统支持TypeFace,即ttf的字体文件。我们可以在程序中放入ttf字体文件,在程序中使用Typeface设置字体。

  • 第一步,在assets目录下新建fonts目录,把ttf字体文件放到这。
  • 第二步,程序中调用:
public class MainActivity extends AppCompatActivity {private TextView textView;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);textView= (TextView) findViewById(R.id.text);AssetManager assets = getAssets();Typeface fromAsset = Typeface.createFromAsset(assets, "fonts/fzlt.ttf");textView.setTypeface(fromAsset);}
}

注意ttf文件命名不能使用中文,否则可能无法加载。

对于需要使用比较多的地方,可以写一个TextView的子类来统一处理。

public class CustomTextView extends TextView {public CustomTextView(Context context) {super(context);// TODO Auto-generated constructor stub}public CustomTextView(Context context, AttributeSet attrs) {super(context,attrs);// TODO Auto-generated constructor stub}public CustomTextView(Context context, AttributeSet attrs,int defStyle) {super(context,attrs,defStyle);// TODO Auto-generated constructor stub}public void setTypeface(Typeface tf, int style) {super.setTypeface(AppContext.getInstance().getTypeface());}}
//初始化自定义字体
typeface = Typeface.createFromAsset(getAssets(), "fonts/fzlt.ttf");

法还是有点缺点的:只能替换一类控件的字体,如果需要替换Button或EditText控件的字体,需要以相同的方式自定义这些控件,这样工作量大,如何高效替换整个app中的字体,见下方参考资料。

在webview中使用自定义的字体

  • 对于本地的网页,在asset目录放字体文件,并在css中添加以下内容,自定义一个字体face,并且在需要的地方使用这个字体face即可。
<style>
@font-face {font-family: 'myface';src: url('file:///android_asset/fonts/fzlt.ttf');
}
body {margin: 0;padding: 0;font-family:'myface','方正兰亭纤黑简体';
}
.textbar{ box-sizing:border-box; width:100%; padding:5px;}
.textbar p{ font-size:16px; text-align:justify; color:#333;line-height:24px; margin:0 0 0 0;}
.textbar h1{ font-size:18px; margin:10px 0 10px 0;color:#000}
</style>
  • 对于在线的网页,则需要把字体文件放到服务器,使用同样的方式定义字体face,应用到每个地方。

为了减少网页或者说服务器端的工作,可以使用本地注入的方式注入font-face的css,并对整个网页进行样式替换。给webview自定义webViewClient,重写onPageFinish,在其中添加如下内容:

view.loadUrl("javascript:!function(){" +"s=document.createElement('style');s.innerHTML="+ "\"@font-face{font-family:myhyqh;src:url('**injection**/hyqh.ttf');}*{font-family:myhyqh !important;}\";"+ "document.getElementsByTagName('head')[0].appendChild(s);" +"document.getElementsByTagName('body')[0].style.fontFamily = \"myhyqh\";}()");//由于网页上是没有权限访问本地的asset文件夹的,因此我们需要拦截请求来加载本地的文件,我这里替换了`file://android_assets/`为 `**injection**/`了,我们还需要重写`shouldInterceptRequest`//在请求为我们这个字体文件的时候,加载本地文件:@Overridepublic WebResourceResponse shouldInterceptRequest (WebView view, String url){WebResourceResponse response = super.shouldInterceptRequest(view, url);CLog.i("load intercept request:" + url);if (url != null && url.contains("**injection**/")) {//String assertPath = url.replace("**injection**/", "");String assertPath = url.substring(url.indexOf("**injection**/") + "**injection**/".length(), url.length());try {response = new WebResourceResponse("application/x-font-ttf","UTF8", getAssets().open(assertPath));} catch (IOException e) {e.printStackTrace();}}return response;}

参考资料:

Android应用使用自定义字体的一些探究:http://blog.isming.me/2015/07/07/android-custom-font/

Android如何高效率的替换整个APP的字体?:http://blog.shemeng.cn/2016/04/20/android-how-efficient-is-the-replacement-of-the-entire-app-font/

Android应用使用自定义字体相关推荐

  1. android 使用 系统字体,Android_解析Android中使用自定义字体的实现方法,1、Android系统默认支持三种字 - phpStudy...

    解析Android中使用自定义字体的实现方法 1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace ...

  2. android 怎么获取app 字体颜色,Android APP使用自定义字体实现方法

    android系统内置字体 android 系统本身内置了一些字体,可以在程序中使用,并且支持在xml配置textView的时候进行修改字体的样式.支持字段为android:textStyle ,an ...

  3. android 自定义字体 ttf,Android APP支持自定义字体

    情景:需要为整个应用替换自定义字体. Android对于文字的字体设置主要是通过以下两个对象 FontFamily.Typeface 在XML文件中设置单个字体: android:id="@ ...

  4. android 开发 字体,Android开发使用自定义字体的实现方法

    释放双眼,带上耳机,听听看~! 1.Android系统默认支持三种字体,分别为:"sans", "serif", "monospace 2.在Andr ...

  5. Android加载自定义字体出错,Android设置自定义字体的解决方案

    找了很多解决方案,但是都会报错,只好边借鉴着前辈们的思路,边自己尝试改代码了QWQ 前面准备:要先把使用的字体文件放入到工具中 新建一个名叫assets的文件夹,然后把字体文件复制到里面,如图 成功放 ...

  6. android textappearance 自定义,Android中的自定义字体

    好!! 这个问题已经很老了,但是如果有人(2015年)正在寻找有关如何通过xml代码将自定义字体应用于所有Textview的答案,请直接参见以下内容: 首先: 我们需要在您的应用目录中的assets文 ...

  7. android应用添加字体,android中的自定义字体(适用于整个应用程序...

    您可以使用字样为textview中的文本设置自定义字体.因此,每当需要textview的自定义字体时,都可以使用以下字体. activity_main.xml中 android:orientation ...

  8. Android Webview使用自定义字体加载网页

    前言 有时,当我们使用Webview加载一个网页的时候,需要使用特定的字体来显示,这时就需要我们对页面做下处理! 方法 ①首先需要我们获得目标网页的HTML源码: URL url = new URL( ...

  9. Android字体权重,android – 如何设置自定义字体权重?

    就像主题暗示的那样,我想以编程方式更改/设置任意字体的font weight. 编辑:我的意思是一般用于绘制字符串的字体. 谢谢你的任何信息. 解决方法: 据我所知,加载字体后无法修改.您可以从现有字 ...

最新文章

  1. 090901 T 面试中遇到的一个Sql Question
  2. python list倒序_Python基础-不一样的切片操作
  3. SQLServer镜像状态异常排查
  4. 微软确定 Win10 付费才能玩 还能不能愉快玩耍?
  5. 照片上的人出来了!云从3D人体重建登顶三项榜单,一张照片就能生成3D形象
  6. jquery audio没有声音_Audio-technica 铁三角 ATH-DSR7BT 头戴式蓝牙无线耳机测评报告 [Soomal]...
  7. 【随机数】深入理解random和srandom
  8. 计算机课程用的ps是哪个版本,ps哪个版本适用于新手?
  9. chrome 打印布局_Chrome打印网页中的宽度控制
  10. 事务处理:概念与技术
  11. 普通索引 唯一索引 主键索引 组合索引 全文索引
  12. 【无标题】scp的使用
  13. 视频融合应用没听说过?
  14. AI——三(路径、画笔)
  15. 浅谈ElasticSearch
  16. 高等数学(第七版)同济大学 习题12-1 个人解答
  17. 深度学习:利用神经网络在少量数据情况下预测房价走势
  18. 怎样提高网站的访问速度的诀窍
  19. “艺术”与“技术”的碰撞------浅谈“艺工交叉”
  20. mmdvm 接收_MMDVM传呼功能(POCSAG)

热门文章

  1. 学生如何使用正版Altium Designer软件;正版AD安装;AD如何使用正版license(适用于老师、学生、校友等等)
  2. 用人之短,任人为亲,因人设事:低效能管理者的3个共性!
  3. Yuner_蠕虫病毒分析
  4. DDL、DML、DCL、TCL概念详细解释
  5. (思维)765. 情侣牵手
  6. 《整理的艺术》读后感
  7. 关闭linux退格键和vi发出的嘟嘟声
  8. 前端面试题(js篇)
  9. Java 字符串截取,截取某个字符之前或者之后的字符串
  10. Scala面向对象基础--类和对象