系统字体切换

来源:互联网 发布:linux常用命令大全 编辑:程序博客网 时间:2024/05/23 01:18

在项目过程中遇到一个问题,用户要求改变launcher的HomeWidget字体,采用他们提供的自定义字体,但是由于widget的视图是由RemoteViews加载进来的,而RemoteViews不提供方法可以获取到组件的实例,也没有方法可以设置对应组件的字体属性,因此需要另外想办法。


fontfamily属性

android系统内置了一些字体,可以在程序中使用,也可以在xml配置时进行修改,支持字段为textStyle;typeface;fontFamily。

系统内置了三种style: normal;bold;italic

系统内置了几种字体:serif;casual;cursive;monospace;sans-serif等,他们都是系统自带的Roboto font families

typeface和fontfamily的功能是一样的。在xml中设置typeface只能设置系统自带的。

设置自定义字体一般方法

  1. 在assets/fonts目录下放置.ttf文件

  2. 在程序中代码设置对应字体

AssetManager mgr=getAssets();//得到AssetManagerTypeface tf=Typeface.createFromAsset(mgr, "fonts/ttf.ttf");//根据路径得到Typefacetv=findViewById(R.id.textview);tv.setTypeface(tf);//设置字体

但是由于我在代码中拿不到组件实例,因此也没有办法直接设置,因此只能换另一种思路。

另外一种实现需求的方法

  1. 将自定义字体文件重命名,改成系统中已有的不常用的字体文件名,然后覆盖测试机系统中system/fonts目录下的对应字体文件。

  2. 在xml中直接设置fontfamily属性为我们替换的字体对对应的属性,运行程序即可

缺点是会删除系统中原来的字体。

如果需要将字体整体添加的话,还需要修改对应的字体相关API,重新编译SDK,那么久可以通过xml进行设置了。

相关链接:

字体和fontfamily属性对应关系

替换Android默认字体

0 0