从一开始写Android程序,就被告知这些常识

长度宽度的数值要使用dp作为单位放入dimens.xml文件中

字体大小的数值要使用sp作为单位,也放入dimens.xml文件中

然后,就没有然后了,仿佛潜台词就是说,你记住去用就行了.

偶然有一天,当我们阴差阳错地将字体写成了dp,也是可以工作,而且效果和sp一样.

这时候,就开始怀疑了,到底有啥区别呢,dp和sp有什么不同呢?

我们做个简单的Sample验证一下,如下,一个布局代码

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="18sp"

android:text="Hello World! in SP" />

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:textSize="18dp"

android:text="Hello World! in DP" />

得到的效果是这个样子

但是,当我们进入系统设置中修改字体大小时

再次进入之前的界面,发现了一些不一样的东西.

由此看来

使用sp作为字体大小单位,会随着系统的字体大小改变

而dp作为单位则不会.

关于sp,文档的描述为:

Scale-independent Pixels – This is like the dp unit, but it is also scaled by the user’s font size preference. It is recommend you use this unit when specifying font sizes, so they will be adjusted for both the screen density and the user’s preference.

大致意思为

sp除了受屏幕密度影响外,还受到用户的字体大小影响

通常情况下,建议使用sp来跟随用户字体大小设置

因此通常情况下,我们还是建议使用sp作为字体的单位,除非一些特殊的情况,不想跟随系统字体变化的,可以使用dp.

android中sp的意义_两分钟理解Android中SP与DP的区别相关推荐

  1. python中mainloop什么意思_很难理解python中的Tkinter mainloop()

    好的,我有一个基本的窗口,有一个编辑和查看按钮.按照我的代码,EDIT和VIEW都会返回一条消息"这个按钮没用".我在"主窗口"下创建了这些.我创建了另一个类& ...

  2. python中int input_两分钟了解python中的input函数

    两分钟了解python中的input函数 input函数在python中是一个内建函数,其从标准输入中读入一个字符串,并自动忽略换行符.下面我们就来看看input函数的具体用法吧. #函数inputm ...

  3. java弱引用怎么手动释放,十分钟理解Java中的弱引用,十分钟java引用

    十分钟理解Java中的弱引用,十分钟java引用 本篇文章尝试从What.Why.How这三个角度来探索Java中的弱引用,帮助大家理解Java中弱引用的定义.基本使用场景和使用方法.由于个人水平有限 ...

  4. unity 3分钟理解 批处理和drawcall有什么区别

    3分钟理解 批处理和drawcall有什么区别? 本人技术有限,如有错误,请道友们留言讨论,切勿口吐芬芳. 正文-------------------------------------------- ...

  5. android中的定时任务一般有两种机制,android 定时任务

    使用timertask进行定时任务 首先创建TimerTask: class SynchroTimerTask extends TimerTask { @Override public void ru ...

  6. 商品规格可选怎么设计_两分钟前|开平木质地栈板怎么安装

    两分钟前|开平木质地栈板怎么安装 zybzclcj 两分钟前|开平木质地栈板怎么安装 规定制造设备的材料不能对卡板木箱的性质.纯度.质量产生影响,其所用的材料需具有安全性.可辨别性及使用强度.木箱又称 ...

  7. 怎样在表格中选出同一类_两个表格中重复的

    [www.520z-2.com - 话题作文] 篇一:<两个电子表格里如何找相同的名字 补充> 两个电子表格里如何找相同的名字 补充:有表格1和表格2,表格1的C列是名字,表格2的B列是名 ...

  8. java中字符串的创建_【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  9. python中点的作用_一分钟了解Python中“*”的作用

    一分钟了解Python中"*"的作用 在为函数传递参数和函数定义时使用参数的时候,时常会看到有和 *和**,下面分别讲解其作用. 调用函数时使用*和 ** 假设有函数 def te ...

最新文章

  1. Android 操作串口 (android serial port api)
  2. Linux平台-×××
  3. Flask API TypeError: Object of type 'Response' is not JSON serializable
  4. JAVA——Scanner类绑定System.in后调用close()方法所引发的错误及其解决方案
  5. 白话科普系列——网站靠什么提升加载速度?
  6. golang为LigerUI编写简易版本web服务器
  7. 以太坊在哪里买_DeFi只是以太坊的开胃小菜,以太坊2.0才是重头戏
  8. js获取字符串最后一个字符代码
  9. @Controller,@Service,@Repository,@Component详解
  10. sh.k7p.work/index.php,Laowang's Blogs
  11. mysql导入的excel更新_excel导入数据库,存在则更新不存在添加
  12. Windows server 2012远程桌面会话主机和远程桌面授权,server2012
  13. mysql航空公司订票系统_航空订票系统(JAVA+SSH+MYSQL)
  14. 世界各国与中国时差查询
  15. Pika 2.3.5 升级 3.0.16
  16. 怎样才能让datetime字段去掉最后面的小时、分、秒
  17. BIS新增手机测试认证标准 IS16333 (Part 3)2017.6.30 印度语
  18. DDNS动态域名解析IPv6地址
  19. 易优cms 模板制作教程
  20. C#读取和写入注册表

热门文章

  1. opera9.6 的一个顽固的bug
  2. Siebel Issue:Siebel菜单栏无法在IE7/8下展开问题解决方案
  3. VS2013 MFC基于对话框编程(创建工程)
  4. BacNet开发入门2
  5. 关于Windows平台下安装mysql软件
  6. vue项目打包之后放在服务器上测试的时候访问不到本地json数据的解决方法
  7. html在状态栏中显示时间,html网页时间显示代码和倒计时代码大全
  8. 自己建服务器 语音盒子_使用Mumble搭建私人语音服务器
  9. ios 自己服务器 苹果支付_iOS应用内支付(IAP)服务端端校验详解
  10. SVN trunk(主线) branch(分支) tag(标记) 用法详解和详细操作步骤