为什么我们要用sp表示Android中的安卓字体大小调节软件

简单谈谈Android中SP与DP的区别
转载 &更新时间:日 09:04:39 & 作者:技术小黑屋
Android里面的sp和dp网上有很多文章都谈过了,但是看后总有一种意犹未尽的感觉。现在我也来谈谈dp和sp,和大家交流一下,不对之处欢迎拍砖。
从一开始写Android程序,就被告知这些常识
一、dp(或者dip device independent pixels)
一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dp=1px。不同设备有不同的显示效果,这个和设备硬件有关。
二、sp(Scaled Pixels)
主要用于字体显示,与刻度无关的一种像素,与dp类似,但是可以根据用户的字体大小首选项进行缩放。
长度宽度的数值要使用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.
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具Android设置字体大小, 该用sp还是dp?
Android设置字体大小, 该用sp还是dp? 大部分人肯定脱口而出, 用sp啊, 傻瓜都知道要用sp而不是dp!!!
那么为什么呢? 可能有人会说, 是google官方专门定义了sp这个单位来描述字体大小, google建议这样搞的!
我想说的是, 大家可能被google误导了吧. 我们来通过实验证明这个道理:
首先我示范一下sp, 我想listview item中的主文本大小设置成18sp, 然后我们看看他在不同屏幕上的反应:
1. Nexus 5
2. 华为某低端机
有没有发现, 华为机器上字体明显大了许多, 有点不符合预期啊有木有!!!
下面我们把sp改成dp, 也就是字体大小改成18dp, 再看看效果:
1. Nexus 5
2. 华为某低端机
明显发现, 用dp的话, 在高端机和低端机上体验更加一致, 字体大小比例更加合适!!!
当然, 我不是要和google抗衡, 非得用dp不用sp, 其实在实际开发中, 我们还是应该多用sp少用dp, 只有在字体比较大的时候, 比如超过了15sp时, 大家这时候就可以考虑用dp试试了.
Android改变字体大小,适应区域宽度
关于安卓中的dp、sp、px、pt单位和字体设置
Android设定字体大小,不随系统变化
多分辨率适配—字体大小适配 sp与dp区别
android字体大小多屏幕适配
Android设计规范-字体字号与图标尺寸
Android系统字体大小如何影响app的字体大小?
浅谈android 屏幕适配中 dp和sp的区别
Android中的长度单位详解(dp、sp、px、in、pt、mm)
借鉴drawable文件夹,values使用dimens控制字体大小、边距大小。适配Android不同机型,不同屏幕
没有更多推荐了,&nbsp>&nbsp
&nbsp>&nbsp
&nbsp>&nbsp
Android下设置文字大小用sp还是dp
摘要:相信很多人看到标题会大吃一惊,长度宽度的数值要用dp,字体的大小用sp,这个理论恐怕在大家心目中早已根深蒂固,官方文档上也是这样写的结论:1、当修改系统字体大小时,字体大小以dp为单位时,大小不变;2、当修改系统字体大小时,字体大小以sp为单位时,大小跟随变化;如果你是上面这个表情,那就请继续往下看吧!验证:main.xml&LinearLayoutxmlns:toolbar=&http://schemas.android.com/apk/res-auto&q
相信很多人看到标题会大吃一惊,长度宽度的数值要用dp,字体的大小用sp,这个理论恐怕在大家心目中早已根深蒂固,官方文档 上也是这样写的
1、当修改系统字体大小时,字体大小以dp为单位时,大小不变;2、当修改系统字体大小时,字体大小以sp为单位时,大小跟随变化;
如果你是上面这个表情,那就请继续往下看吧!
&LinearLayout
xmlns:toolbar=&http://schemas.android.com/apk/res-auto&
android:layout_width=&match_parent&
android:layout_height=&wrap_content&
android:orientation=&vertical&&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&20sp&
android:textColor=&#FF757233&
android:textSize=&20sp& /&
android:layout_width=&wrap_content&
android:layout_height=&wrap_content&
android:text=&20dp&
android:textColor=&#FF757233&
android:textSize=&20dp& /&
&/LinearLayout&
修改系统字体大小看看效果
small字体:
large字体:
然而如果你还想知道到底发生了什么事的话就请继续往下看.
在看下面这些内容之前,请你先看看这篇文章:Android下setTextSize的正确使用姿势
追溯设置文字大小的源代码,最终会进入到以下方法:
public static float applyDimension(int unit, float value, DisplayMetrics metrics){
switch (unit) {
case COMPLEX_UNIT_PX:
case COMPLEX_UNIT_DIP:
return value * metrics.
case COMPLEX_UNIT_SP:
return value * metrics.scaledD
case COMPLEX_UNIT_PT:
return value * metrics.xdpi * (1.0f/72);
case COMPLEX_UNIT_IN:
return value * metrics.
case COMPLEX_UNIT_MM:
return value * metrics.xdpi * (1.0f/25.4f);
在这里我们可以看到sp和dp的区别就是density和scaledDensity的区别那么这两个有什么区别呢?
* The logical density of the display. This is a scaling factor for the
* Density Independent Pixel unit, where one DIP is one pixel on an
* approximately 160 dpi screen (for example a 240x320, 1.5&x2& screen),
* providing the baseline of the system's display. Thus on a 160dpi screen
* this density value will be 1; on a 120 dpi screen it would be .75; etc.
* This value does not exactly follow the real screen size (as given by
* {@link #xdpi} and {@link #ydpi}, but rather is used to scale the size of
* the overall UI in steps based on gross changes in the display dpi. For
* example, a 240x320 screen will have a density of 1 even if its width is
* 1.8&, 1.3&, etc. However, if the screen resolution is increased to
* 320x480 but the screen size remained 1.5&x2& then the density would be * increased (probably to 1.5).
* @see #DENSITY_DEFAULT
* A scaling factor for fonts displayed on the display. This is the same
* as {@link #density}, except that it may be adjusted in smaller
* increments at runtime based on a user preference for the font size.
public float scaledD
从以上源代码注释可以看到:scaledDensity会收到用户配置的影响,而density不会.这也就是为什么设置sp单位时字体大小会受到用户配置系统字体的影响.
附上官方对于sp和dp的讲解
dp是一种密度无关像素,对应于 160dpi 下像素的物理尺寸
sp是和dp相同的基本单位,但它会按用户首选的文本尺寸进行缩放(属于缩放无关像素)
因此,设置文字大小到底是用sp还是dp,看来还是得根据实际需求来决定呀.
至此,文章结束,希望此文能帮助到你,如果对此文有不同见解,欢迎直接评论!
参考:Android 解决字体随系统调节而变化的问题设置Android app的字体不随系统全局字体大小的变动而变动老生常谈之Android里的dp和spwhat is the difference between scaledDensity and density in Android`s DisplayMetrics class?
以上是的内容,更多
的内容,请您使用右上方搜索功能获取相关信息。
若你要投稿、删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内给你回复。
新用户大礼包!
现在注册,免费体验40+云产品,及域名优惠!
云服务器 ECS
可弹性伸缩、安全稳定、简单易用
&40.8元/月起
预测未发生的攻击
&24元/月起
你可能还喜欢
你可能感兴趣
阿里云教程中心为您免费提供
Android下设置文字大小用sp还是dp相关信息,包括
的信息,所有Android下设置文字大小用sp还是dp相关内容均不代表阿里云的意见!投稿删除文章请联系邮箱:zixun-group@service.aliyun.com,工作人员会在五个工作日内答复
售前咨询热线
支持与服务
资源和社区
关注阿里云
International用户“看加速得中二”对问题“为什么我们要用sp表示Android中的字体大小?”的回答 - 问答 - 云+社区 - 腾讯云云+社区首页我刚接触到Android,我正在尝试在该教程中,他们使用单元“sp”表示textSize属性,而“dp”用于其他属性。请告诉我sp和DP有什么不同吗?写回答邀请回答为什么我们要用sp表示Android中的字体大小?写回答dp具有恒定比过渡到px:dp = px * ratio。ratio永远不会改变任何特定的设备。虽然sp(比例缩放)具有可扩展比例:sp = px * ratio * scale。ratio永远不会改变,但scale用户配置。这scale可以被需要更大字号的人使用,例如,更舒适地使用设备。回答过的其他问题支持cname解析解析后的网址看你其他网站建立的网站的提示24小时后再查一下试试~ 尝试以下几种方法: .addScalar(&ID&, StringType.INSTANCE) (使用正确的类型,不一定是StringType) RegisterHibernateType( ... ) ...
Subquery会做你想做的事: select t.*
from table t -- Need to replace table with your table-name i.e. Projecttble, etc..
where id = (select t1.id
...... 你只需要MyAbstract.class该表达式返回表示MyAvact的Class对象。 首先,你需要指定MSI文件的完整路径。另外,如果你指定了其他任何内容,则命令行非常挑剔,有时它不像value = proprtyname之间的空格。这些错误会给你帮助屏幕,因为你的语法有些不对。 请注意,如果需要提升,MSI文件将无法在静默模式下成功安装。如果您处于静音模式,它...... 学生扫描二维码扫描关注云+社区}

我要回帖

更多关于 一般文档字体大小 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信