从android4.0起系统设置的”显示“提供设置字体大小的选项。以三星s4为例,在“设置-我的设备-显示-字体大小”中选择,可以调整系统的字体。这个设置直接会影响到所有sp为单位的字体适配,所以很多app在设置了系统字体后瞬间变得面目全非。

针对该设置,影响的是Configuration下的fontScale。

Configuration

conf = getResources().getConfiguration();

Log.e("TestTAG" , "fontScale="+ conf.fontScale);

虽然google推荐使用sp作为字体的单位,但实际的开发过程中通常是根据UIUE的设计稿来换算

sp(px换算sp)。而sp即使在同一种密度下其值也不尽相同。比如在240dpi的设备,如果是480x800分辨率这个值通常是1.5倍

(scaledDensity=1.5),如果是480xZ(z>800)那么这个值有可能大于1.5。这无疑给设备的适配带来更多的困难和陷阱。所以个人通常建议使用dpi来作为字体的单位,这样就不会被该设置影响。但是需要适配不同的分辨率,提供不同的size。

对于个别app不需要根据系统字体的大小来改变的,可以在activity基类(app中所有的activity都应该有继承于我们自己定义的一个BaseActivity类)中加上以下code。经测试可行。

@Override

publicResources getResources() {

Resources res = super.getResources();

Configuration config=newConfiguration();

config.setToDefaults();

res.updateConfiguration(config,res.getDisplayMetrics() );

returnres;

}

但是,奇怪的是,如果在onCreate及onResume调用该语句,针对home退出后修改字体再进入的case不能解决。需要配合Activity的属性configChanges。

Android:configChanges="fontScale"

另一个博主,提供了如下方案,未测试,仅作参考。

再将px转sp的时候,为了看转化式子的时候看到了metrics.scaledDensity,于是我就打印这个看了看,然后切换不同的字号的时候,这个是在变的,调成普通显示的值为3.0。因为我用的1080P的分辨率,我们知道px在这种屏幕尺寸上,1dp =

3px,所以体统改变手机系统的字号,肯定是与scaledDensity这个属性有关,手机设置里面是改变了系统中scaledDensity的值,从而造成各个APP里面原生的字号被改变,为了能够保持我们界面的不变,所以我们必须拿到不同屏幕尺寸下各个原始的缩放系数,于是开始看DisplayMetrics里面的属性和方法,发现了density,尝试着打印出来看了看,发现这个值是固定的,换了台720P的手机看了看,这个值为2.0,而之前1080P上显示的是3.0,所以这个就是保存原始比例系数的值,到这我们的思路就出来了,只要我们将scaledDensity的值赋值为density,这样我们就能保证我们界面中的字号不会随着外部的设置改变而改变。

有了上面的步骤,接着我在Application中的onCreate方法中添加了下面的代码 DisplayMetrics

displayMetrics =

getResources().getDisplayMetrics(); displayMetrics.scaledDensity =

displayMetrics.density; 但是这个只有刚进入的时候有用,如果我们中途HOME出来,更改了字体大小,我们APP里显示的字号还是会改变的,所以最后我在我们项目的基类BaseActivity中的onCreate()和onRestart()方法中都添加了上述代码.

如何设置app字体跟随系统_设置Android app的字体不随系统全局字体大小的变动而变动...相关推荐

  1. HTML文件总是WPS打开,设置wps默认打开方式_设置默认使用WPS打开文件

    今天有个客户问我,为什么我双击xls文件不能直接用WPS打开,我直接帮他远程调试,发现他wps没有关联默认文件格式. 下面我就教大家如何设置WPS默认打开方式. 测试环境:windows 7  64位 ...

  2. 模块字体不生效_新版iPhone敬业签便签软件怎么将字体调大?

    敬业签是一款功能比较全面的桌面便签软件,分为个人便签和团队协作便签,主要功能包括:云储存.多端同步.提醒待办事项.时间管理.已完成.日历月视图和时间轴等.在使用新版iPhone敬业签便签软件时,如果想 ...

  3. uefi启动u盘安装系统_技嘉uefi启动怎么安装win8.1系统【安装教程】

    近几年来,大多数厂商生产电脑主板都以uefi配置为主导,uefi类型主板优点主要是能加快启动速度,它绕过了bios自检流程便能直接引导操作系统.从win8/win8.1操作系统开始,都能用uefi引导 ...

  4. 联想小新air13装双系统_联想小新air13pro安装ubuntu双系统要点笔记

    前言 本笔记适用于联想小新air13pro安装双系统(预装win10+ubuntu). 本人系统小白,因为一些原因需要安装双系统,但在安装过程中遇到了一些问题,所以希望能给面临同样问题的朋友一些帮助. ...

  5. 惠普战66怎么用u盘进入系统_惠普战66笔记本怎么装系统?惠普战66装win10系统步骤...

    [文章导读]惠普战66是一款很火爆系列的笔记本,采用了intel 8代cpu,我们知道intel 8代cpu不能安装win7,最近有很多网友问惠普星系列预装的win10系统不好用想重装,但是由于惠普战 ...

  6. jquery实现app开发闹钟功能_趣味闹钟APP开发,随意切换闹钟叫醒功能

    智能手机端的发展使得人们获取外界信息更加高效,然而智能手机的出现也有一定的弊端,生活中很多人常常因为浏览手机信息而选择熬夜,早起自然也就成为了一种困难,而趣味闹钟APP开发或多或少可以帮助用户解决问题 ...

  7. 移动app测试的多样性_做移动APP功能测试,这些因素你得都考虑到~

    对于刚入行的测试新手来说,无论是做手动测试还是自动化测试,前期都避免不了学习前人经验,从而尽可能减少自己的漏测问题.作为一个过来人,今天,我就将自己的移动APP功能测试分享给大家,希望对新手有一定帮助 ...

  8. 华为手机如何升级鸿蒙系统_华为官方正式公告!鸿蒙手机系统下周发布:普通花粉何时能升级?...

    导语:看科技资讯,品鉴最新最全的科技新闻,了解当今科技发展水平.点击关注微信公众号:"数码科技大爆炸",每天最新最全的科技资讯,轻松放松,更多好看科技资讯尽在这里,还不快来点击关注 ...

  9. twilio 短信接口_使用Android Things和Twilio构建短信通知系统

    twilio 短信接口 在本教程中,我们将介绍如何使用Android Things和Twilio构建SMS通知系统. 本教程的主要目标是逐步描述如何实现基于Android Things的IoT系统,该 ...

  10. 联想ghost重装系统_一键ghost怎么用|一键ghost重装系统教程|一键重装系统步骤

    2016-12-26 17:26:17 一键ghost是操作非常简单的一键重装工具,我们可以直接在本地通过一键ghost重装系统,不用借助光盘或U盘,就能重装32位或64位系统,一键ghost集成了3 ...

最新文章

  1. 深度洞悉2017企业IT三大关注焦点
  2. VMware虚拟机 取消 简易安装
  3. vivado----fpga硬件调试 (一)----mark_debug
  4. python如何爬虫网页数据-python网络爬虫爬取网页内容
  5. 创建自己的内容提供器
  6. linux安装mysql遇到的问题_Linux下安装MySQL5.7及遇到的问题解决方法
  7. js 简单的滑动教程(四)
  8. 什么是9.png,如何制作,如何使用。
  9. WIN7 VS2005 安装wince6.0教程(不管是X86还是X64,我都尝试成功了)
  10. AMS中控推送系统安装使用说明
  11. JAVA 编写一个员工类,成员变量和成员方法自拟,编写一个测试类
  12. 生物学哲学:科学哲学的新视野
  13. SQL Server 2000初识—管理工具与设计基础
  14. 世界各地主流,非主流搜索引擎以及功能性搜索引擎一览(转)
  15. Postgres -- 如何解决除法中分母为 0 的问题
  16. Mac下远程桌面连接Microsoft Remote Desktop安装与使用
  17. 渗透测试 10 --- 扫描 web目录 (dirb、wfuzz、wpscan、nikto)
  18. public static void 可以写成 static public void
  19. 深度强化学习——基本概念(1)
  20. 基于深度学习的抓取检测(grasp detection)相关论文解析

热门文章

  1. 京东承认刘强东涉案!
  2. 详解GPU、CPU差异
  3. 远望资本程浩:做 To B,一定要避免 9 类错误!
  4. 益东成网约车出行功能介绍
  5. 微信小程序报错:WAServiceMainContext.js:2 Object(env: Windows,mp,1.05.2203070; lib: 2.14.1)
  6. 微信小程序 - 绑定事件 bindtap(包括是否传入参数)
  7. 数字图像处理原理与实践(MATLAB版)勘误表
  8. UG\NX二次开发 创建UDO特征
  9. Android中的Window、WindowManager以及悬浮框视频播放的实现
  10. 【并发编程】 --- Reentrantlock源码解析5:再探不可中断性 + 线程unpark后诡异的Thread.interrupted()判断