设为首页 加入收藏

TOP

Android项目实战(二十三):仿QQ设置App全局字体大小(一)
2017-10-13 10:47:31 】 浏览:7077
Tags:Android 项目 实战 二十三 设置 App 全局 字体 大小

一、项目需求:

因为产品对象用于中老年人,所以产品设计添加了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控件已经不满足我们的需求了。

     但是,这里我找到了一个很好的自定义控件可以完美的实现这个问题:

     资料来源:   Android 自定义带刻度的seekbar   

  这里我加了一些注释

  1 public class CustomSeekbar extends View {
  2     private final String TAG = "CustomSeekbar";
  3     private int width;
  4     private int height;
  5     private int downX = 0;
  6     private int downY = 0;
  7     private int upX = 0;
  8     private int upY = 0;
  9     private int moveX = 0;
 10     private int moveY = 0;
 11     private float scale = 0;
 12     private int perWidth = 0;
 13     private Paint mPaint;
 14     private Paint mTextPaint;
 15     private Paint buttonPaint;
 16     private Canvas canvas;
 17     private Bitmap bitmap;
 18     private Bitmap thumb;
 19     private Bitmap spot;
 20     private Bitmap spot_on;
 21     private int hotarea = 100;//点击的热区
 22     private int cur_sections = 2;
 23     private ResponseOnTouch responseOnTouch;
 24     private int bitMapHeight = 38;//第一个点的起始位置起始,图片的长宽是76,所以取一半的距离
 25     private int textMove = 60;//字与下方点的距离,因为字体字体是40px,再加上10的间隔
 26     private int[] colors = new int[]{0xffdf5600,0x33000000};//进度条的橙色,进度条的灰色,字体的灰色
 27     private int textSize;
 28     private int circleRadius;
 29     private ArrayList<String> section_title;
 30     public CustomSeekbar(Context context) {
 31         super(context);
 32     }
 33     public CustomSeekbar(Context context, AttributeSet attrs) {
 34         this(context, attrs, 0);
 35     }
 36     public CustomSeekbar(Context context, AttributeSet attrs, int defStyleAttr) {
 37         super(context, attrs, defStyleAttr);
 38         cur_sections = 0;
 39         bitmap = Bitmap.createBitmap(900, 1100, Bitmap.Config.ARGB_8888);
 40         canvas = new Canvas();
 41         canvas.setBitmap(bitmap);
 42         thumb = BitmapFactory.decodeResource(getResources(), R.mipmap.img_setting_seekbar_thumbe_large);   //这个是滑动图标
 43         spot = BitmapFactory.decodeResource(getResources(),R.mipmap.img_setting_seekbar_thumbe);            //这个是未滑动到的界点的图标
首页 上一页 1 2 3 4 下一页 尾页 1/4/4
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇对于HDMI设备连接状态的监听 下一篇Android高效计算——RenderScript..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目