Android 开发 改变某个Activity的系统字号

2023-11-06

Android系统的字号可以在设置里改变,常常会影响布局效果。

如果是个别控件不想被改变大小,使用 dp 而非 sp 作为字体单位即可。


转载请注明出处:http://blog.csdn.net/u013258802/article/details/53395878


最近想只保持某一个页面的字号不被改变,又不想使用dp作字号单位,于是搜了下纯code的方案。

网上常见的方式是通过resource获取configuration,调用setToDefaults()方法:

Resources res = context.getResources();
Configuration config = res.getConfiguration();
config.setToDefaults();
res.updateConfiguration(config, res.getDisplayMetrics());
在 setContentView() 之前调用

但是这样会改变整个APP的字号,也就是说,在执行完这几句代码后,除非杀进程,否则你后续都会看到默认字号,而我只想改变某一个页面的字号。

思路很简单,在该页面的onCreate()方法中获取设置进行缓存,在页面关闭时恢复即可。


由于Configuration类不可继承,也没有实现Cloneable接口,因此直接保存整个设置比较麻烦,需要用到反射或序列化,所以这里简化一下:

Configuration的setToDefaults()方法重置了很多不必要的属性,我们只需要对fontScale进行更改。




onCreate()方法内获取当前系统设置,mFontSize变量用于保存:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    resizeFontSize(this);
    setContentView(R.layout.activity_pos_detail);
    ...

private float mFontSize = 1.0f;
private void resizeFontSize(Context context) {
    Resources res = context.getResources();
    Configuration config = res.getConfiguration();
    mFontSize = config.fontScale;
    config.fontScale = 1.0f;// 默认字体尺寸值为1.0f
    res.updateConfiguration(config, res.getDisplayMetrics());
}

onPause()方法内恢复:

@Override
protected void onPause() {
    super.onPause();
    reloadFontSize(this);
}

private void reloadFontSize(Context context) {
    Resources res = context.getResources();
    Configuration config = res.getConfiguration();
    config.fontScale = mFontSize;
    res.updateConfiguration(config, res.getDisplayMetrics());
}


运行一下,没毛病~


不过最后考虑再三,还是选择了在BaseActivity中重写getResource()方法:

/**
 * 重置App界面的字体大小,fontScale 值为 1 代表默认字体大小
 * @return
 */
@Override
public Resources getResources() {
    Resources res = super.getResources();
    Configuration config = res.getConfiguration();
    config.fontScale = 1;
    res.updateConfiguration(config, res.getDisplayMetrics());
    return res;
}
简单粗暴地拒绝了字体更改带来的各种问题。。。


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

Android 开发 改变某个Activity的系统字号 的相关文章

  • 如何设置长PreferenceScreen的滚动位置

    Android 应用程序有一些很长的首选项屏幕 它们始终在首选项菜单的顶部打开 我知道用户想要在首选项菜单中的位置 如何强制打开首选项屏幕并滚动到特定的首选项项目 我知道这是一个旧问题 所以这个答案仅供参考 要自动选择给定屏幕 您所要做的就
  • RecyclerView每隔几个项目都是相同的 - 可扩展项目

    我的 recyclerView 有问题 我正在使用此布局来扩展 recyclerView 中的 cardView https github com AAkira ExpandableLayout https github com AAkir
  • getItemAtPosition() 未在列表视图中返回值

    我创建了一个自定义基本适配器类 用图像和文本填充列表视图 类的代码如下 public class ViewAdapter extends BaseAdapter private Activity activity private Strin
  • 检测正在插入的设备

    我希望能够检测设备是否已插入 我希望能够像查询连接状态一样进行查询 这可能吗 或者我是否需要创建一个监听电池事件的广播接收器 显然是ACTION BATTERY CHANGED http developer android com refe
  • 从 admob 独立 SDK 切换到 Google Play 服务 SDK 时,apk 大小会膨胀

    使用 Admob SDK 我的 apk 大小为 230Kb 当用 google play services SDK 替换 Admob SDK 时 它是 1 5MB 膨胀了 6 倍以上 我想完整的 Google Play 服务客户端 SDK
  • ImageView Android 内存

    我原来的后续question https stackoverflow com questions 5339883 android app ram usage 有没有一种方法可以在 Android 应用程序中使用 ImageViews 而不使
  • 在 Android 中从互联网链接获取数据

    我正在制作一个带有 URL 的应用程序 asp 扩展名 我们向其传递所需的参数并使用 POST 方法获取一些字符串结果 关于如何实现这一目标有什么建议吗 UPDATED 实际上我有一个 net 链接 它接受一些 POST 参数并给我一个结果
  • 在Android中打开浮动菜单(上下文菜单)?

    我创建了一个新菜单 名为 drmenu xml 当我按下菜单按钮时它可以正常工作 但是当用户按下按钮时我需要打开上下文菜单 下面的代码按钮只显示一个吐司 这是我的 xml 布局
  • 垂直翻转 Android Canvas

    有没有一种简单的方法可以在 Android 中翻转画布 我似乎找不到任何可以让我垂直翻转它的东西 这样 y 轴上的零就是手机屏幕的底部而不是顶部 如果解决方案不是特别快也没关系 因为我没有对画布进行任何计算密集的操作 提前致谢 Try ca
  • Android 应用程序主活动出现 ClassNotFoundException

    大多数设备都可以运行我的应用程序 但我收到此错误报告 java lang RuntimeException Unable to instantiate activity ComponentInfo com company app com c
  • Android 和 iOS 中的应用程序文件大小差异

    通过使用两个应用程序分发服务 Android 市场和 Apple 应用程序商店 我发现了一个谜团 Apple 应用程序的文件大小通常大于 Android 应用程序 我似乎找不到任何对这些差异的解释 而且这似乎是一个未触及的主题 我尝试过分配
  • 通过 Intent 从文件管理器中选择文件

    我想做的 我想获取文件字符串形式的路径 我通过 Android 文件管理器选择该路径 我拥有的 Intent intent new Intent Intent ACTION GET CONTENT intent setType startA
  • 不同风格的模块文件

    我正在尝试在同一个应用程序中实现播放服务和华为服务 但希望能够按风格配置使用哪一个 每种风格都使用自己的 applicationIdSuffix 因此 对于每种不同的风格 华为插件都会失败 我无法编译 我的应用程序模块包含agconnect
  • 在应用程序之间共享自定义帐户验证器

    我有一个为使用自定义 AccountAuthenticator 的客户端构建的应用程序 它工作得非常好 并且满足了客户的需求 但是 这只是将使用相同身份验证管理器的应用程序集合中的第一个应用程序 这就是我不确定如何继续的地方 我无法知道任何
  • Android Studio 停留在构建 gradle 项目信息上

    我正在使用 Android Studio 2 3 每当我尝试创建一个新项目或打开某个项目时 它都会卡在此时 正在构建 Gradle 项目信息 请建议我一些解决方案 它可能正在下载 Gradle zip 文件 e g Users user g
  • 为什么 Android 上的免安装应用有两种设置?

    我使用的是运行 Android 11 的 Pixel 3 我发现有 2 种不同的设置可以控制免安装应用的某些方面 设置 应用程序和通知 默认应用程序 打开链接 即时应用程序 即使未安装 也打开应用程序中的链接 切换默认为开 Google P
  • 如何从Android webview下载文件?

    我下面的代码可以很好地加载 url 页面 并且在搜索歌曲后 当我单击下载链接时 它崩溃了 关于如何让下载管理器与网络视图一起工作的教程并不多 我究竟做错了什么 import java io File import android app A
  • 可下载字体例外

    我决定使用可下载字体 https developer android com guide topics ui look and feel downloadable fonts html在我的项目中 IS 按照指南中的建议实施了所有内容 当我
  • 特定铃声 firebase 通知 xamarin.android

    How i can force the push notification to run ringtone instead of default notification sound is there any way to ovveride
  • 在android中测量不规则多边形的面积

    我正在开发一个应用程序 在其中我在地图上绘制多边形 并且我使用的地图不是谷歌 它的Mapsforge开源离线地图库 我可以通过将地理点转换为像素点来轻松在地图上绘制多边形 但在这里我想发现是不规则的多边形 为此我做了很多尝试 但它让我失败了

随机推荐

  • android studio在XML预览中出现Rendering Problems问题

    http blog csdn net u014365838 article details 52078501 如图所示 出现问题的原因是style不和规范 虽然没有大问题 编译也可以通过 不过总有些碍眼 解决方法 1 在styles xml
  • apache-ant build.xml 实例

    文章目录 version apache ant 1 9 15 build xml
  • php发送邮件样式_php简单实现发送带附件的邮件

    这篇文章主要介绍了php简单实现发送带附件的邮件 涉及附件上传及邮件发送的相关技巧 需要的朋友可以参考下 本文实例讲述了php简单实现发送带附件的邮件 分享给大家供大家参考 具体如下 下面是静态html代码 带附件的邮件发送 发送人 收件人
  • 多gpu训练梯度如何计算,求和是否要求平均

    作者 智星云服务 链接 https www zhihu com question 271226455 answer 1521784627 来源 知乎 著作权归作者所有 商业转载请联系作者获得授权 非商业转载请注明出处 作者 itsAndy
  • libc.so.6

    libc so 6是一个类似于WINDOWS下的一个快捷指向型的文件 用命令LN产生 ln s root arm unknown linux gnu arm unknown linux gnu lib libc so root worksp
  • uni-app生产环境去掉console

    uni app生产环境去掉console 运行期判断 运行期判断是指代码已经打入包中 仍然需要在运行期判断平台 此时可使用 uni getSystemInfoSync platform 判断客户端环境是 Android iOS 还是小程序开
  • kubernetes安全检测工具-kube-bench

    一 kube bench基础介绍 kube bench是基于go语言开发 一款针对kubernetes进行安全检测的工具 主要是检测kubernetes集群的各个组件的配置 确认配置文件是否符合安全基线标准 输出检测报告 并给出修复建议 从
  • 蓝桥杯 算法训练 拿金币 Java

    import java util Scanner public class Main public static void main String args Scanner scanner new Scanner System in int
  • 第十二届蓝桥杯javaB组刷题day2

    1 直线 我们思路 暴力解法 将所有可能的情况列举出来 故需要两个坐标的横纵坐标 便需要四个for循环来进行遍历 出现问题 需要排除斜率为0的情况 后面再单独进行相加 因为需要set来加入斜率 而一条斜线y kx b 包括k和b set只能
  • Linux ceontOS7.X 安装RabbitMQ

    安装erlang环境 https blog csdn net qq 37279783 article details 90515409 下载 解压MQ 下载 https www rabbitmq com releases rabbitmq
  • 测试用例设计方法---等价类划分法

    1 等价类划分法 1 1 定义 是把所有可能输入的数据 即程序的输入域划分策划国内若干部分 子集 然后从每一个子集中选取少数具有代表性的数据作为测试用例 方法是一种重要的 常用的黑盒测试用例设计方法 1 1划分等价类 1 有效等价类 指对于
  • 大师兄!SLAM 为什么需要李群与李代数?

    from https mp weixin qq com s sVjy9kr 8qc9W9VN78JoDQ 作者 electech6 来源 计算机视觉life 编辑 Tony 很多刚刚接触SLAM的小伙伴在看到李群和李代数这部分的时候 都有点
  • 编译原理第二版4.4答案

    4 4 节的练习 4 4 1 为下面的每个文法设计一个预测分析器 并给出预测分析表 你可能先要对文法进行提取左公因子或者消除左递归的操作 练习 4 2 2 中 1 7 中的文法 解答 S gt 0 S 1 0 1 step1 提取左公因子
  • [1182]clickhouse的日期函数

    文章目录 时间获取 时间转换 时间计算 时间格式化 时间获取 获取当前时间戳 select toUnixTimestamp now 获取指定时间的时间戳 select toUnixTimestamp 2021 05 11 14 37 37
  • Java线程:并发协作-死锁

    本文转载至 http lavasoft blog 51cto com 62575 222074 Java线程 并发协作 死锁 线程发生死锁可能性很小 即使看似可能发生死锁的代码 在运行时发生死锁的可能性也是小之又小 发生死锁的原因一般是两个
  • 【系列 2】手写vue模板编译

    模板编译流程是什么 1 获取 outerHTML div name div 2 正则查找转义成 ast 语法树 ast tag div attrs name id value app children type 3 text name pa
  • Java 上传附件后端接口大体流程和逻辑

    Java 上传附件 后端接口大体逻辑 所谓的附件 即包括我们常见的图片 各类文档 压缩包等等 上传附件是我们日常开发过程中 经常遇到的一个场景 也是我们Java后端程序猿必须要会的 今天周五 事情做完 离下班还有点时间 来水水大体思路 本文
  • CSS——文字对齐方式

    横向对齐 方法1 单行块级元素水平居中只用添加text align即可 如P标签 垂直居中vertical align只适用于行内元素与单元格 所以设置行高与块高度相同即可 text align center 方法2 普通的文本居中只要设置
  • 【OpenCV3图像处理】Mat类详解 之 元素的获取与赋值 ( 对比.at<>()函数 和 .ptr<>()函数)

    Mat中像素的获取与赋值 计算机视觉中 图像的读取是图像处理的基础 图像就是一系列像素值 OpenCV使用数据结构cv Mat来存储图像 cv Mat是一个矩阵类 矩阵中每一个元素都代表一个像素 对于灰度图像 像素用8位无符号数 0表示黑色
  • Android 开发 改变某个Activity的系统字号

    Android系统的字号可以在设置里改变 常常会影响布局效果 如果是个别控件不想被改变大小 使用 dp 而非 sp 作为字体单位即可 转载请注明出处 http blog csdn net u013258802 article details