一、前言
最近项目添加了一项调整应用字体大小功能,做完后空闲之余总结一下。本功能仿照微信应用“设置” - “通用” - “字体大小”功能,又有一点区别。据我所知,常见改变全局字体大小方法有两种(若有更好的方案可以留言,互相学习),我把这两种分为可控和不可控,为什么这么分呢,当然不是为了方便记忆。那么简单说下两者方式的实现过程:
1、不可控:通过重写Actiivity的getResources()方法更新应用的字体倍数来调整全局字体大小
优点:实现简单
缺点:不可控制(所有字体放大倍数都是一致),无法跨进程(项目中另一个进程的字体不会改变,需要重新配置),只对sp字体单位有效果。....
2、可控:通过setTheme()方法,一开始就初始化设置不同风格的字体样式来更改全局字体大小。
优点:随意调节任意位置的字体大小
缺点:实现麻烦
而本文正式采用了第一种方案,主要是中途添加该功能,时间也不充裕,抽取字体大小又太过耗时。
微信字体大小个人猜测使用第二种方案,后者是更好的实现方式也不一定。
好了,扯得有点多。我要开始真正的表演了 ... 掌声呢 鲜花呢 .....................人呢
二、效果预览
三、实现步骤
1、自定义字体调整控件
网上找了一个相似的控件并加以完善,功能相对简单,就不做介绍了。
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Point;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
import java.util.ArrayList;
import java.util.List;
import blcs.lwb.lwbtool.R;
import blcs.lwb.lwbtool.utils.DensityUtils;
/**
* TODO 仿微信字体大小调整
* 自定义属性:
* lineWidth 线条粗细
* lineColor 线条颜色
* totalCount 线条格数
* circleColor 球型颜色
* circleRadius 球型颜色半径
* textFontColor 文字颜色
* smallSize 小“A” 字体大小
* standerSize “标准” 字体大小
* bigSize 大“A” 字体大小
* defaultPosition 默认位置
*/
public class FontSizeView extends View {
private int defaultLineColor = Color.rgb(33, 33, 33);
private int defaultLineWidth;
private int defaultMax = 5;
private int defaultCircleColor = Color.WHITE;
private int defaultCircleRadius;
// 当前所在位置
private int currentProgress;
// 默认位置
private int defaultPosition = 1;
// 一共有多少格
private int max = 7;
// 线条颜色
private int lineColor = Color.BLACK;
// 线条粗细
private int lineWidth;
//字体颜色
private int textColor = Color.BLACK;
//字体大小
private int smallSize = 14;
private int standerSize = 16;
private int bigSize = 28;
// 圆半径
private int circleRadius;
private int circleColor = Color.WHITE;
// 一段的宽度,根据总宽度和总格数计算得来
private int itemWidth;
// 控件的宽高
private int height;
private int width;
// 画笔
private Paint mLinePaint;
private Paint mTextPaint;
p