一、项目需求:
因为产品对象用于中老年人,所以产品设计添加了 APP 全局字体调整大小功能。
这里仿做 QQ 设置字体大小的功能。
QQ 实现的效果是,滚动下面的 seekbar,当只有 seekbar 到达某一个刻度的时候,这时候上部分的效果展示部分会改变文字大小,
但是在拖动过程中字体不会改变。关闭此界面,就可以看到改变文字后 app 整体的实际文字大小效果了。
-----------------------------------------------------------------------------------------------------------------------------
二、理清一下实现思路:
1、先将一个 APP 内所有的文本设置级别,大概 3--5 个级别(具体看项目需求),比如标题栏的 TextView 我们给他设置级别 1(默认 24sp) , 类似设置 级别 2(默认 22sp)等等。
这样做的目的可以方便的我们设置,如果每个 Textview 大小都乱乱的,那这个文字大小改变的功能也没什么意义了。
2、创建一个类 Constant, 类中创建一个静态变量,这个变量用于记录当我们拖动 seekbar 的时候 对应改变。取值范围就是我们 seekbar 的界点。
Demo 我们限制文字大小有四个界点:小、标准、大、特大。
那么静态变量 TEXT_SIZE 取值就有 0,1,2,3
- public static int TEXT_SIZE = 0;
3、滑动 seekbar,当达到界点的时候,改变静态变量 TEXT_SIZE 的值,并且刷新列表适配器(这个列表是展示文字大小效果的,所以数据是我们自己写死的,
要求达到某个界点才会刷新适配器,绝不可能 seekbar 有滑动操作我们就执行刷新适配器的)
4、在退出设置字体界面的时候,用 sharedPreferences 保存,每次进入 app 的时候读取。
这样在每个 Activity 或者 Fragment 创建 View 的过程中在 TextView 创建的时候给控件动态设置文字的大小
- textview.setTextSize(级别默认文字大小 + seekbar级别 * 3);
思路就是这么简单,看懂的可以自己去实现了,有点懵的看下面的例子来深入了解下。
整体思路就是: 一个标记变量,记录要显示文字大小的级别,sharedpreference 保存。然后在每个要打开的新的界面创建 View 的过程中 给 TextView 动态设置文字大小
注意:不是我修改文字大小之后,整个 APP 所有界面的 TextView 都立马改变。
-----------------------------------------------------------------------------------------------------------------------------
三、代码实现
1、首先就是这个 SeekBar 控件,上面需要有刻度,需要有文字,显然我们用 android 提供的自带的 SeekBar 控件已经不满足我们的需求了。
但是,这里我找到了一个很好的自定义控件可以完美的实现这个问题:
来源: http://www.cnblogs.com/xqxacm/p/5779762.html