在app的开发过程中可能很多人都会遇到这样的一个问题,当你把手机系统的字体大小改变之后再次进入我们的app时候,app的界面简直是惨不忍睹,进过网上查询资料,发现出现在介绍时候我们必须把px dp sp这三个单位理解清楚:

PX:px就是pixel的缩写啦,pixel即像素,它不是自然界的长度单位。px是就是一张图片中最小的点,一张位图就是由这些点构成的。1024px就是1024像素,最简单的你可以在windows桌面属性里的“设置”看到,如果是1024×768,也就是说水平方向上有1024个点,垂直方向上有768个点。谁能说出一个“点”有多长多大么?可以画的很小,也可以很大。如果点很小,那画面就清晰,我们称它为“分辨率高”,反之,就是“分辨率低”。所以,像素的大小是会“变”的,也称为“相对长度”。
在编程的过程种一般是不会使用px的,因为android手机的种类太多了,尺寸大小不一。

DP:与密度无关的像素,这是一个基于屏幕物理密度的抽象单位。
正是因为android尺寸太多的变化,px无法正常的显示,Android为我们提供了一个虚拟的像素单位 - DP 或者 DIP (Density-Independent pixel),当然也可以理解为 Device-Independent Pixel。为什么说是虚拟呢,因为它的大小不是一个物理(Phisical)值,而是由操作系统根据屏幕大小和密度动态渲染出来的,正是因为如此,dp设置的大小在不同的手机中使用是相同的。

SP:SP 全称是 Scale-independent Pixels,用于字体大小,其概念与DP是一致的,也是为了保持设备无关。因为Android用户可以根据喜好来调整字体大小,所以要使用sp来表示字体大小。
    看了sp px dp的解释之后大概就会明白这个问题出现的原因了。因为我们在设置textview的字体大小的时候,我们在布局文件中一般都会使用dp,但是我们在代码中设置字体大小的时候使用代码:
tv_sp.setTextSize(20);
字体设置了,可我们并不知道设定的25到底是多大的,单位会是像素(px)吗?其实不是像素(px),而是缩放像素sp(scaled pixel),官方对SetTextSize的说明也是非常清楚的
Set the default text size to the given value, interpreted as “scaled pixel” units. This size is adjusted based on the current density and user font size preference.
那使用代码设置的字体单位只能是sp了吗?其实也不是,Android还有一个setTextSize的重载方法,可以通过设置单位了来限定字体的大小

tv_sp.setTextSize(TypedValue.COMPLEX_UNIT_PX,20); //22像素 
tv_sp.setTextSize(TypedValue.COMPLEX_UNIT_SP,20); //22SP 
tv_sp.setTextSize(TypedValue.COMPLEX_UNIT_DIP,20);//22DIP

这样,在代码中设置字体大小时,同时将字体大小的单位设置了dp,就可以固定字体大小不随系统设定的字号变化了。
但是可能在写完代码之后才发现,自己都不知道具体的设置字体在哪里了。   针对该设置,影响的是Configuration下的fontScale,所以我们只需要重写getResources,去设置fontScale就可以了。
Configuration conf = getResources().getConfiguration();  
Log.e("TestTAG" , "fontScale=" + conf.fontScale);  
我们只需要在基类BaseActivity或者Application(这里设置之后,后面需要修改就不好设置了)里面设置下面的代码就可以了:

@Override  
public Resources getResources() {  
    Resources res = super.getResources();    
    Configuration config=new Configuration();    
    config.setToDefaults();    
    res.updateConfiguration(config,res.getDisplayMetrics() );  
    return res;  
}

但是其实google设置这个也是有原因的,主要给中老年人使用时候字体的改变,例如在网页浏览时候,改变字体大小可以更好的让人浏览,那么我们在使用的时候不要去继承BaseActivity重新继承Activity去编码。

没有重写getresouces时候设置的dp和sp的显示:

设置getresouces之后字体不再跟随系统改变了:

在网上还看到很多人说点击Home出去之后,更改字体大小再次进入app的时候,字体还是会改变大小(在重写getResouces的前提下),但是我这边测试是没有问题的,如果有问题的话,我们可以在onresume()中把getResouces()重写一遍就可以了。
    如果在application中重写了getResouces怎么恢复跟随系统字体改变呢?我直接再次重写 返回 super.getResouces()还是没法恢复变化。
     欢迎大家指点。

app字体大小会随着系统字体大小变化相关推荐

  1. native字体尺寸自适应 react_ReactNative字体大小不随系统字体大小变化而变化

    引言 在开发react-nativeApp时,相信大家都应该遇到过这样的问题:用户设置了系统的字体大小之后,导致自己的APP布局紊乱,甚至有些内容会被切掉/隐藏,这对于用户来讲,是非常不好的用户体验. ...

  2. ReactNative字体大小不随系统字体大小变化而变化

    引言 在开发react-nativeApp时,相信大家都应该遇到过这样的问题:用户设置了系统的字体大小之后,导致自己的APP布局紊乱,甚至有些内容会被切掉/隐藏,这对于用户来讲,是非常不好的用户体验. ...

  3. 设置应用内字体大小不跟随系统字体大小

    在项目开发者有用户反馈部分界面 字体重叠严重或者显示不全.开始也是觉得是屏幕适配不完善的问题. 但是测试发现并没有什么问题. 之后就考虑到是否用户设置了系统字体大小,导致字体显示异常尤其是布局宽高固定 ...

  4. android系统自带字体设置,安卓手机系统字体设置-系统字体设置(Big Font) 安卓版v2.37-PC6安卓网...

    Big Font 改变系统字体大小:这个软件可以直接修改安卓系统字体的大小,相比原生系统的大中小肯那个还不能完全符合所有人.这个软件还不错. 官方介绍 透过改变系统字体大小Big Font应用,你可以 ...

  5. 计算机系统字体安装程序,windows系统字体安装方法:使用字体安装软件-windows技巧-电脑技巧收藏家...

    windows系统字体安装方法:使用字体安装软件 如果给系统中安装数百上千个字体的话,那么不仅会让系统变得很慢,设计.应用软件的稳定性也很成问题.退一步说,要在AI.PS等软件的上千种字体下拉框里找到 ...

  6. android 系统字体转换工具,Windows系统字体转换工具FontConvert 0.95 免费版

    Windows系统字体转换工具是一款非常实用的电脑字体转换软件,该软件可以有效的帮助用户方便快捷的进行系统字体的转换,同时,软件还支持将ttf文件批量转换成系统字体.支持简体.繁体以及英文字体,有需要 ...

  7. 替换android系统字体颜色,Android替换系统字体

    1.引言 最近老大安排一个任务,让我看看android 字体这块,将我们产品中的字体替换下.花了1.2天看懂,还得写篇文章,教程在组内进行分享.这次算是我进军Android系统的第一步.这篇文章基于A ...

  8. 混合app 安卓用户将手机系统字体大小调整后会影响app的字体大小及样式

    解决思路:即使用户调整手机字体大小也不会影响app的字体 解决方法:安卓工程师那边加一行webview.getSettings().setTextZoom(100)就可以禁止缩放,按照百分百显示.

  9. 安卓APP的字体大小设置不受系统字体大小的影响

    一,前言 近期在优化代码的过程中 发现这么一个问题 测试机有一个小屏的手机 展示的布局文件比较拥挤,而且字体较大.为了优化这一个问题 刚开始以为是字体适配的问题 后来无意中发现在手机的显示设置 -字体 ...

最新文章

  1. 附加作业:源自刘乾老师的问题
  2. win8的开始菜单不见了怎么办
  3. Java课程笔记_3
  4. struts2上传多文件(b)
  5. Linux不同发型版本(Debian REHL)与软件包管理器(RPM dpkg)的概念
  6. Oracle用户权限
  7. Chrome开发者工具,如何清除Cookies
  8. OPENCV(七)对啤酒盖进行缺陷检测
  9. source test.sh、sh test.sh、./test.sh有什么区别
  10. canvas webGL SVG 比较
  11. TX2/Linux下can总线的接收与发送详解!(回环测试)
  12. c语言程序设计迷宫问题,C语言迷宫问题
  13. “npm”‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  14. 高性能本地缓存Ristretto(三)——淘汰策略
  15. 接口测试的标准和规范性
  16. Codeforces 200A Cinema 并查集 + 思维 (看题解)
  17. 新颖的自我介绍_有创意的自我介绍五篇
  18. SAN交换机配置步骤
  19. 《C陷阱与缺陷》----第二章 语法陷阱
  20. 财务建模完整指南第五讲——第五届CVA估值建模

热门文章

  1. python 标准库 excel_超全整理|Python 操作 Excel 库 xlwings 常用操作详解!
  2. jquery在线地址,layui在线地址,bootstrap在线地址以及把线上地址保存到本地
  3. Java Web(1)-JavaScript
  4. Mac系统优化工具MacBooster 7中文版安装和激活教程分享
  5. html如何图片立体自动旋转,html中如何让图片翻转
  6. 零基础学画画,一套非常详细的手绘教程,4步教会你画,收藏学习
  7. 简单用java做一个图书管理系统
  8. PCB板布线中地线和电源线的布线规则
  9. mitmproxy的安装
  10. python计算二次方程的实根