美文网首页android的日常看点android实用技术Android进阶之路
Android常用需求一:全局字体设置及自定义字体控件

Android常用需求一:全局字体设置及自定义字体控件

作者: lzt橘子 | 来源:发表于2017-08-28 00:31 被阅读216次

    前言

           字体设置是Android开发中比较常用的需求,因为不同的手机厂商定制的ROM的缘故,手机系统的默认字体在不同品牌上是不一致的,而产品人员提出固定app字体的样式,或者app考虑繁体地区如港澳台,东南亚华人区,需要提供简繁字体切换,对于以上需求,仅仅依靠系统提供的默认字体是满足不了的。


    演示效果


    GitHub链接

          全局字体设置和自定义字体控件库-------ReplaceFonts

    特性:

    - app全局字体设置.

    - 支持自定义字体替换的View和TextView,ToolBar子类.

    导入

    compile

    原理

    1. 全局字体设置:利用反射的原理,在app启动时,替换掉app字体属性DEFAULTMONOSPACE对应字体文件路径,然后再通过设置app主题style的item属性 android:typeface = monospace,从而达到全局替换字体的目的;                                                                                                                                    2. 自定义字体控件:单单通过方式1设置全局字体,只对系统自带的View类,如TextView及其子类有效,而通过canvas和paint绘制文本的方式,并不起作用,此时,需要通过自定义View的paint的setTypeface(Typeface.MONOSPACE)方法来达到目的。



    下面来看看具体如何操作

    1.全局字体设置

    (1).将需要的字体ttf文件放置到assets目录下的,

    1_assets目录

    图中 fzltxhf.TTF为繁体字体,fzltxhj.TTF为简体字体

    (2).在Application使用的theme中添加标签<item name:"android:typeface">mononspace</item>

    2_theme中添加标签 2_theme中添加标签

    (3).在Application中初始化字体文件,这里需要使用到第三方的工具类FontUtil,在replaceSystemDefaultFontFromAsset(this,"fonts/fzltxhj.TTF")方法中传入context和字体文件相对路径,如按图1放置,路径为"fonts/fzltxhj.TTF".

    3_初始化字体

    (4).如果使用到了ToolBar,用FontSystemToolBar替换,同时要通过paddingLeft来控制标题的左偏移量.

    4_ToolBar 4_ToolBar

    (5).如果使用到了自定义View,请继承该库的FontSystemview或参照以下方式修改自定义View的字体.

    5_自定义View

    (6).通过以上操作,便可完成整个app字体的统一替换.

    2.自定义字体控件

    (1).创建View的子类,通过paint.setTypeface(typeface)改变字体,也可以直接声明public static String fontAssetPath = Configs.FONTS_XHJ;

    注意整个app同一种字体只需读取一次文件,因为字体文件读取比较耗费时间并且会占用一定量的内存.

    6_创建View的子类

    (2).创建TextView的子类,通过TextView的setTypeface(typeface)方法来改变字体,也可以直接声明

    public static String fontAssetPath = Configs.FONTS_XHJ;注意事项同上.

    7_创建TextView的子类

    3.简繁体切换

           其实就是字体切换,通过SP配置文件记录用户选择的字体样式,只要在Application的onCreate方法里,加载不同的字体文件即可.


    注意事项

    如果app项目需要简繁体切换功能,切记不要在TextView控件类的setText()方法或自定义字体控件的canvas.drawText()方法直接使用繁体字文本数据-即下图红框所示,否则无论是全局替换的方式还是自定义字体控件,都会导致系统的TextView控件类和开发者自定义的字体控件的简繁体不一致,通过加载同一种字体的简体文件或繁体文件,并且只使用简体文本数据,来实现简繁切换功能,。

    7_简繁体切换

           喜欢我的文章的话,请多多关注。



       


    相关文章

      网友评论

        本文标题:Android常用需求一:全局字体设置及自定义字体控件

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