android字体的设置有以下方法:

1)直接在代码设置Typeface customFont = Typeface.createFromAsset(this.getAssets(), "1.ttf");

TextView textview1= (TextView) findViewById(R.id.activity_main_header);

textview1.setTypeface(customFont);

这种方法在少数文本需要修改字体的时候比较适用,如果一个项目整体都需要这样的字体的话,那代码就比较重复了,麻烦了、

2)自定义控件

你可以为每个文本组件创建一个子类,如TextView、Button等,然后在构造函数中加载自定义字体。public class MyTextView extends TextView {

public MyTextView (Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

}

public MyTextView (Context context, AttributeSet attrs) {

super(context, attrs);

}

public MyTextView (Context context) {

super(context);

}

public void setTypeface(Typeface tf, int style) {

super.setTypeface(Typeface.createFromAsset(getContext().getAssets(), "1.tff"))

}

}

然后只需要将标准的文本控件替换成你自定义的就可以了(例如BrandTextView替换TextView)。

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="小清新"/>

还有,你甚至可以直接在XML中添加自定义的字体属性。要实现这个,你需要定义你自己的declare-styleable属性,然后在组件的构造函数中解析它们。

在大多数情况下,这个方法还不赖,并且有一些优点(例如,切换字体粗细等等,字体可以在组件xml文件的typeface属性中定义)。但是我认为这个实现方法还是太重量级了,并且依赖大量的模板代码,为了一个替换字体的简单任务,有点儿得不偿失。

3)其他方案

理想的解决方案是自定义主题,然后应用到全局或者某个Activity。

但不幸的是,Android的android:typeface属性只能用来设置系统内嵌的字体,而非用户自定义字体(例如assets文件中的字体)。这就是为什么我们无法避免在Java代码中加载并设置字体。

所以我决定创建一个帮助类,使得这个操作尽可能的简单。使用方法:

FontHelper.applyFont(context, findViewById(R.id.activity_root), "fonts/YourCustomFont.ttf");

并且这行代码会用来加载所有的基于TextView的文本组件(TextView、Button、RadioButton、ToggleButton等等),而无需考虑界面的布局层级如何。

标准(左)与自定义(右)字体的用法。

Standard (left) and Custom (right) fonts usage.

这是怎么做到的?非常简单:1.  public static void applyFont(final Context context, final View root, final String fontName) {

2.      try {

3.          if (root instanceof ViewGroup) {

4.              ViewGroup viewGroup = (ViewGroup) root;

5.              for (int i = 0; i

6.                  applyFont(context, viewGroup.getChildAt(i), fontName);

7.          } else if (root instanceof TextView)

8.              ((TextView) root).setTypeface(Typeface.createFromAsset(context.getAssets(), fontName));

9.      } catch (Exception e) {

10.        Log.e(TAG, String.format("Error occured when trying to apply %s font for %s view", fontName, root));

11.        e.printStackTrace();

12.    }

13.}

正如你所看到的,所需要做的仅仅是将基于TextView的文本组件从布局中遍历出来而已。

早期采用的是第二种实现方法,但是缺点在于对于第三方组件,你需要去修改别人的代码,才能实现自定义字体,这恰恰违反了OC(Open & Close)原则,对扩展开放,对修改封闭。

刚看到第三种的时候,也是惊为天人,姑且不说结果,我觉得这种活跃的思路非常重要,很值得学习参考。

但是最后被team里的人否决了,理由是违背组件设计原则,实现方式略嫌粗暴。后来我仔细想想,一个是要做好内存管理(似乎会引起内存问题),视图状态改变,也要重复加载(横竖屏、onResume等),也绝对不是简单的活儿。

android 变化字体,android 字体修改相关推荐

  1. Android 系统(72)---Android系统增加字体库及修改系统默认字体

    Android系统增加字体库及修改系统默认字体 阅读数:53 转载出处:https://blog.csdn.net/hsaekong/article/details/80305263 前言 最近项目上 ...

  2. android 程序更换字体,Android修改自己程序字体的方法详解

    Android提供三种字体:"Sans","serif"和"monospace". 1.在Android XML文件中设置字体可以采用and ...

  3. Android系统增加字体库及修改系统默认字体

    转载请注明出处:https://blog.csdn.net/hsaekong/article/details/80305263 前言 最近项目上需要修改android系统默认字体,现把总结记录下,便于 ...

  4. android仿QQ优雅的修改App字体大小

    最近公司有需求需要在App里提供修改应用字体大小的功能,网上查了下资料,感觉都不是和理想,后决定自己实现功能. 实现原理 根据Activity的主题动态修改,在主题中添加自定义的字体大小属性,满足不同 ...

  5. android 标题字体大小,如何修改android studio标题字体大小

    匿名用户 1级 2017-03-08 回答 之前为大家讲解了android studio怎么修改字体大小和颜色?其实android studio代码字体样设置位置和之前将的设置位置是一样的,这里再给大 ...

  6. 改Android app字体,Android APP自定义字体大小修改

    简单记录下今天做的自定义字体大小修改的功能 需求:添加具体字体自定义大小功能.不需要跟随系统字体大小改变而改变 1.首先看一下用到的调节字体大小的控件: 字体大小调节页 控件继承自系统的SeekBar ...

  7. android架构师之路——修改app字体

    android自带的字体 通过 android:typeface="normal" 或者 android:fontFamily="monospace"两种方式来 ...

  8. Android全局修改字体大小,Android 仿微信全局字体大小调整

    image 目录 一.前言 二.效果预览 三.实现步骤 1.自定义字体调整控件 2.滑动按钮改变当前页面预览字体大小 3.返回时,保存放大倍数并重启应用 4.初始化应用时配置字体放大倍数. 四.Dem ...

  9. 小米手机android目录在哪里设置字体,在哪里修改小米手机的字体大小

    在哪里修改小米手机的字体大小 年轻人视力比较好,可以适应得了小米手机默认的字体大小.但是老年人容易远视,需要看大号的字体,现在小编就来教大家修改字体的方法. 具体如下: 1. 首先,我们登录手机的&q ...

最新文章

  1. 凡客诚品成都研发中心招聘.net开发经理
  2. js参数使用时常犯的一个低级错误
  3. 2020年什么编程语言最受欢迎,待遇最高?
  4. Django使用Python操作数据库 --Django 1.8.2 文档(中文)部分笔记
  5. 三度其三——矢量场的旋度
  6. R及RStudio软件安装教程
  7. Python画图之散点图(plt.scatter)
  8. 【频域分析】频谱泄露、频率分辨率、栅栏效应
  9. Insyde uefi 隐藏设置_使用u盘GPT+UEFI模式安装windows10系统步骤详细图解
  10. ArcGIS提取道路中心线数据制图
  11. MS SQL2000 数据库置疑解决方法
  12. R485集线器定协议有多少种能否抗干扰?
  13. Voxblox: Incremental 3D Euclidean Signed Distance Fields for On-Board MAV Planning
  14. 不同vlan实现互通
  15. FileZilla FTP Server 安全加固
  16. 利辛县腾讯服务器维护,腾讯内容开放平台
  17. python将excel时间_Python学习笔记(一)Python时间戳与Excel的日期
  18. Java内存模型(JMM)详解
  19. CAS单点登录(http方式)
  20. 【P28】极简全分立耳放(22版)

热门文章

  1. 5.修改hadoop配置文件
  2. 【数学与算法】贝塞尔曲线
  3. Dubbo 源码分析 - SPI 机制
  4. 编码练习——Java-7-集合类
  5. echarts散点图使用
  6. JSP快速入门教程——全十讲
  7. Java 自动装箱性能
  8. 从0开始学习 GitHub 系列之「初识 GitHub」
  9. 网络公开课资源 ——关注CS/AI/Math
  10. Coursera课程Python for everyone:chapter3