Android中修改默认字体的大小----fontScale

2023-05-16

有客户需求要修改系统中默认字体的大小。

一般的步骤是,在frameworks/base/core/java/android/content/res/Configuration.java文件中,修改函数setToDefaults中fontScale的值,例如改成:fontScale = 1.18f 。然后在packages/apps/Settings/res/values/arrays.xml中,修改数组entryvalues_font_size中的值,使其中有一个值何默认值是一样的即1.18(不然的话会出现默认字体是一个大小,然后在Settings->Display->Font size中设置的时候就设置不了默认的fontScale了,也会出现比如明明最开始的时候字体是normal,但是再次点击normal的时候字体会改变)。

 /**
     * Set this object to the system defaults.
     */
    public void setToDefaults() {
        fontScale = 1;
        mcc = mnc = 0;
        locale = null;
        userSetLocale = false;
        touchscreen = TOUCHSCREEN_UNDEFINED;
        keyboard = KEYBOARD_UNDEFINED;
        keyboardHidden = KEYBOARDHIDDEN_UNDEFINED;
        hardKeyboardHidden = HARDKEYBOARDHIDDEN_UNDEFINED;
        navigation = NAVIGATION_UNDEFINED;
        navigationHidden = NAVIGATIONHIDDEN_UNDEFINED;
        orientation = ORIENTATION_UNDEFINED;
        screenLayout = SCREENLAYOUT_UNDEFINED;
        uiMode = UI_MODE_TYPE_UNDEFINED;
        screenWidthDp = compatScreenWidthDp = SCREEN_WIDTH_DP_UNDEFINED;
        screenHeightDp = compatScreenHeightDp = SCREEN_HEIGHT_DP_UNDEFINED;
        smallestScreenWidthDp = compatSmallestScreenWidthDp = SMALLEST_SCREEN_WIDTH_DP_UNDEFINED;
        densityDpi = DENSITY_DPI_UNDEFINED;
        seq = 0;
        simSetLocale = false; /// M: sim locale feature
    }
 <string-array name="entryvalues_font_size" translatable="false">
        <item>0.85</item>
        <item>1.0</item>
        <item>1.15</item>
        <item>1.30</item>
    </string-array>


在修改的过程中,看到一种比较好的字体大小与显示之间的对应关系:

在显示Display界面时,会运行Settings/src/com/android/settings/DisplaySettings.java这个类,在onResume的时候,会调用函数updateState(),在这个函数中接着会调用readFontSizePreference(mFontSizePref);在这个函数中会获取当前系统中的字体大小:

public void readFontSizePreference(ListPreference pref) {
        try {
        	Log.d("zhangmq", "readFontSizePreference ActivityManagerNative.getDefault().getConfiguration() = "
                 +ActivityManagerNative.getDefault().getConfiguration());
            mCurConfig.updateFrom(ActivityManagerNative.getDefault().getConfiguration());
        } catch (RemoteException e) {
            Log.w(TAG, "Unable to retrieve font size");
        }

        // mark the appropriate item in the preferences list
        Log.d("zhangmq", "readFontSizePreference mCurConfig.fontScale = " + mCurConfig.fontScale);
        int index = floatToIndex(mCurConfig.fontScale);
        Log.d("zhangmq", "readFontSizePreference index = " + index);
        pref.setValueIndex(index);

        // report the current size in the summary text
        final Resources res = getResources();
        String[] fontSizeNames = res.getStringArray(R.array.entries_font_size);
        pref.setSummary(String.format(res.getString(R.string.summary_font_size),
                fontSizeNames[index]));
    }
真是有趣的是floatToIndex方法:

int floatToIndex(float val) {
        String[] indices = getResources().getStringArray(R.array.entryvalues_font_size);
        float lastVal = Float.parseFloat(indices[0]);//获得数组中的第一个值,如0.85
        Log.d("zhangmq", "floatToIndex lastVal = " + lastVal);
        for (int i=1; i<indices.length; i++) {     //循环比较,从第二个值开始
        	Log.d("zhangmq", "floatToIndex fffffffffffffff ");
            float thisVal = Float.parseFloat(indices[i]);
            Log.d("zhangmq", "floatToIndex thisVal = " + thisVal);
            if (val < (lastVal + (thisVal-lastVal)*.5f)) {  //val与 前一个值加上后一个减去前一个值得差值的一半 进行比较,即与两个相连值得中间值比较
            	 Log.d("zhangmq", "floatToIndex qqqqqqqqq i-1 = " + (i-1));
                return i-1;                  //如果val小于两个相连值得中间值,则index去前一个值,否则继续循环比较
            }
            lastVal = thisVal;
            Log.d("zhangmq", "floatToIndex iiiiiiiii lastVal = " + lastVal);
        }
        return indices.length-1;
    }


有时候会在overlay中进行覆盖Settings中的entryvalues_font_size,如果修改Settings中的entryvalues_font_size没作用,可以查看是否被overlay等覆盖了。









本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android中修改默认字体的大小----fontScale 的相关文章

随机推荐

  • 二级域名绑定二级目录的两种方法

    当用WordPress建站后 xff0c WordPress位于二级目录 xff08 v ar www html xff09 下 xff0c 进行域名解析时如何把域名解析到二级目录下 xff0c 网络上一般有两种方法 xff0c 一是利用接
  • 软件改变世界

    随着科技的不断进步 xff0c 软件及其相关技术的发展已经深刻地改变了人类社会的方方面面 从交通运输 医疗卫生到商业服务 教育培训 xff0c 软件技术的应用已经深入到我们的日常生活中 xff0c 对我们的生活方式和生产方式都带来了深刻的影
  • TIME_WAIT过多解决办法

    还是一次性能测试过程中 xff0c TPS曲线先升后降 xff0c 响应时间增加 xff0c 请求没有大量报错 xff0c 程序无报错 xff0c 服务器监控发现cpu xff0c io 压力并不大 xff0c 顺势排查一下链接数 xff0
  • MATLAB 比较好入门书籍有哪些推荐

    https www zhihu com topic 19559252 hot https www zhihu com question 19904418 作者 xff1a 陈村 链接 xff1a https www zhihu com qu
  • manjaro安装Microsoft Edge浏览器

    span class token function sudo span pacman S yay base devel yay S microsoft edge dev bin
  • 关于SQL SERVER注释快捷键

    SQL Server Management Stuido提供了键盘和按钮快捷方式来注释掉突出显示的代码 只需突出显示要禁用或注释掉的代码部分 xff0c 再单击SQL Editor工具栏上的Comment Selection按钮即可 xff
  • Linux 网络编程—— libnet库详细使用指南

    概述 通过 原始套接字实例 xff1a 发送 UDP 数据包 的学习 xff0c 我们组 UDP 数据包时常考虑字节流顺序 校验和计算等问题 xff0c 有时候会比较繁琐 xff0c 那么 xff0c 有没有一种更简单的方法呢 xff1f
  • 论文一:基于实体多元编码的时序知识图谱推理_彭成

    xff08 本文很好的介绍了时序知识图谱的推理 xff0c 重要 xff01 xff01 xff01 xff09 时序知识图谱定义 xff1a 时序知识图谱是一种多关系有向图 xff0c 结点时时序知识图谱中的实体 xff0c 有向边是实体
  • SQLException: null, message from server: “Host ‘10.112.71.80‘ is blocked because of many connection

    启动项目后也看到报 SQLException null message from server 34 Host 39 10 112 71 80 39 is blocked because of many conne 这一类异常翻译来看是由于
  • Python案例003——句子生成器

    目标 xff1a 通过用户提供的内容 xff0c 随机生成唯一的句子 提示 xff1a 以用户输入的名词 代词 形容词等作为输入 xff0c 然后将所有数据添加到句子中 xff0c 并将其组合返回 输出固定的 内容 43 用户输入的内容 c
  • 通过Python复制远程服务器下的文件到本地

    使用Python拷贝windown共享目录下的文件 1 先通过net use命令获取共享目录访问权限 2 使用xcopy命令进行文件拷贝到本地目录 代码如下 import os share user 61 39 user 39 share
  • Centos6.5下进行PHP版本升级

    统计插件 WP Statistics 要求PHP5 4以上 xff0c 可本机PHP为5 3 3 xff0c 无奈只有对服务器PHP进行升级 xff0c 遂写下本文 Step1 xff1a 查看安装服务器当前安装版本 php V Step2
  • Ubuntu18.04 设置 sudo 不需要输入密码

    1 在系统启动后 xff0c 对于有些系统设备操作 xff0c 需要使用root权限执行 xff1b 这时候往往需要用到sudo命令 2 使用sudo命令 xff0c 必须输入用户密码 xff0c 但是在应用程序里面 xff0c 输入密码操
  • ipa文件的安装方法

    ipa文件无法像android的apk那样直接安装 xff0c 是因为需要能直接安装ipa xff0c 打包ipa的时候 xff0c 是需要创建不同的证书和证书profile文件的 下面我对三种情况进行概述 1 company类型 xff0
  • Windows7睡眠后自动唤醒

    笔者的电脑 xff08 Windows7 64 位旗舰版 xff09 睡眠后 xff0c 隔段时间后会自动唤醒 经两项配置后 xff0c 解决了该问题 1 禁用唤醒定时器 控制面板里进入 34 电源选项 34 34 更改计划设置 34 界面
  • 开机动画制作及多分辨率适配

    1 开机动画制作 开机动画资源文件 xff1a bootanimation zip 解压后的文件目录 xff1a desc txt文件内容 xff1a 512 416 60 代表的分别是宽 xff0c 高 xff0c 帧数 xff1b 具体
  • 查看Settings中的值

    1 列出所有的值 settings list secure global 如 xff1a settings list global 2 查看指定的值 settings get secure global xxx 如 xff1a settin
  • product 分区和权限

    在 Android 9 及更高版本中 xff0c 权限和列入白名单过程的更改会影响 product 分区上授予特权应用权限的方式 permissions xml 文件必须与特权应用位于同一个分区中 之前有遇到过 xff0c 应用在produ
  • 判断字符串中只包含字母和数字

    最近做一个小小的项目 xff0c 有输入用户名一项 xff0c 要求只能输入字母和数字 即在用户输入用户名后 xff0c 要做一个关于用户名的合法判断 xff1a 只包含字母和数字 一开始以为这个超级简单啊 xff0c 想都没想就直接使用了
  • Android中修改默认字体的大小----fontScale

    有客户需求要修改系统中默认字体的大小 一般的步骤是 xff0c 在frameworks base core java android content res Configuration java文件中 xff0c 修改函数setToDefa