Android 仿微信全局字体大小调整

这篇博客详细介绍了如何在Android应用中仿照微信实现全局字体大小调整功能。作者对比了两种方法,选择了实现简单但限制较多的第一种,即通过重写Activity的getResources()方法来更新字体倍数。文章包含实现步骤、效果预览,并提供了Demo源码链接,供读者参考学习。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

一、前言

二、效果预览

三、实现步骤

1、自定义字体调整控件

2、滑动按钮改变当前页面预览字体大小

3、返回时,保存放大倍数并重启应用

4、初始化应用时配置字体放大倍数。

四、Demo地址

五、内容推荐


一、前言

最近项目添加了一项调整应用字体大小功能,做完后空闲之余总结一下。本功能仿照微信应用“设置” - “通用”  -  “字体大小”功能,又有一点区别。据我所知,常见改变全局字体大小方法有两种(若有更好的方案可以留言,互相学习),我把这两种分为可控和不可控,为什么这么分呢,当然不是为了方便记忆。那么简单说下两者方式的实现过程:

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;
    private Paint mText1Paint;
    private 
### Android 实现微信风格用户界面开发教程 #### 设计思路与布局结构 为了创建一个类似于微信的应用程序界面,在设计过程中需要考虑整体布局的简洁性和功能性。通常,这种类型的UI由几个主要部分组成:顶部导航栏、聊天列表以及底部标签栏。 #### 创建项目并配置环境 启动Android Studio之后新建一个项目,选择合适的模板作为起点可以加快开发速度。对于模仿即时通讯类APP来说,“Empty Activity”是一个不错的选择[^1]。 #### 设置主题样式 通过修改`res/values/styles.xml`文件来定义全局的主题属性,确保整个应用程序具有一致性的视觉效果。这一步骤有助于快速调整颜色方案和其他装饰性元素,使应用看起来更加接近目标产品——即微信客户端。 #### 构建主页面布局 ##### 上部区域 - 导航栏 在XML布局文件中添加如下代码片段用于构建带有返回按钮和标题的文字视图组件: ```xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="@color/colorPrimaryDark" android:orientation="horizontal"> <!-- 返回图标 --> <ImageButton android:id="@+id/back_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_arrow_back_white_24dp" android:contentDescription="@string/back_desc"/> <!-- 页面标题 --> <TextView android:layout_width="0dp" android:layout_weight="1" android:gravity="center_vertical|start" android:textColor="#FFFFFF" android:textStyle="bold" android:textSize="28sp" <!-- 注意这里使用的是 sp 单位而非 dp 来表示字体大小 --> android:paddingStart="16dp" android:layout_height="wrap_content"/> </LinearLayout> ``` 注意上述代码中的`textSize`参数应该采用`sp`(scale-independent pixels)单位而不是原始描述中的`dp`,因为这样能够更好地适应不同屏幕密度下的显示需求。 #### 添加功能模块 完成基本框架搭建后就可以着手于各个具体的功能实现了,比如联系人管理、消息收发等功能都需要逐一编码实现。这部分工作涉及到的知识面较广,包括但不限于网络请求处理、数据库操作等技术要点。 #### 测试优化 最后不要忘记进行全面测试以保证用户体验流畅无误,并根据反馈持续改进细节之处直至满意为止。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值