首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

两分钟理解Android中SP与DP的区别

从一开始写Android程序,就被告知这些常识 长度宽度的数值要使用dp作为单位放入dimens.xml文件中 字体大小的数值要使用sp作为单位,也放入dimens.xml文件中 然后,就没有然后了,仿佛潜台词就是说...偶然有一天,当我们阴差阳错地将字体写成了dp,也是可以工作,而且效果和sp一样. 这时候,就开始怀疑了,到底有啥区别呢,dp和sp有什么不同呢?...in DP" /> 得到的效果是这个样子 ? 但是,当我们进入系统设置中修改字体大小时 ? 再次进入之前的界面,发现了一些不一样的东西. ?...由此看来 使用sp作为字体大小单位,会随着系统的字体大小改变 而dp作为单位则不会....大致意思为 sp除了受屏幕密度影响外,还受到用户的字体大小影响 通常情况下,建议使用sp来跟随用户字体大小设置 因此通常情况下,我们还是建议使用sp作为字体的单位,除非一些特殊的情况,不想跟随系统字体变化的

54120
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    布局文件中的sp、dp还有px的区别

    Google公司为了解决分辨率过多的问题,在Android的开发文档中定义了px、dp、sp,方便开发者适配不同分辨率的Android设备。对于初级程序员来说理解掌握适配的一些基础知识是必须的。...dip: 同dp ▲ 举个栗子 : px与dp pixel,即像素,1px代表屏幕上的一个物理的像素点。...所以建议在长度宽度的数值使用dp作为单位。 ▲ 再举个栗子 : dp与sp 既然我们在上面说了,dp可以自动适配设备机型,那在字体里是否也同样可行?...在480*800分辨率中,3.7屏幕对角线英寸数的设备下,我们修改手机系统字体大小,得到效果图如下 ? ▲ 由此可以看出使用sp作为字体大小单位,会随着系统的字体大小改变,而dp作为单位则不会。...所以建议在字体大小的数值要使用sp作为单位 ▲ 拓展 提供一个工具类:dp与px值转换 public class DensityUtil { /** * 根据手机的分辨率从 dp 的单位

    2.1K10

    Android中的单位(dp、sp、dpi)

    概述 因为不同的屏幕具有不同的像素密度,因此同样数量的像素在不同设备上可能对应于不同的物理尺寸。因此要使用 dp和 sp单位。 dp:是一种密度无关像素,对应于160dpi下像素的物理尺寸。...sp:是相同的基本单位,但它会按用户首选的文本尺寸进行缩放(属于缩放无关像素),因此在定义文本尺寸时应使用此计量单位(但切勿为布局尺寸使用此单位)。 px 像素,屏幕上显示数据的最基本的点。...dpi dpi(Dots Per Inch):每英寸的点数,也称像素密度,即屏幕对角线像素值÷英寸值。 ? 例:720x1280分辨率5.7英寸的手机: ?...dp dp:在每英寸160点的显示屏上,1dp = 1px,即px = dp(dpi / 160) sp sp(Scaled Pixels):通常用于指定字体的大小,当用户修改手机显示的字体时,字体大小会随之改变...).scaledDensity; return (int) (spValue * fontScale + 0.5f); } public static int px2dp

    2K10

    Android的px、dp和sp

    大家好,又见面了,我是全栈君 Android的px、dp和sp px: 即像素,1px代表屏幕上一个物理的像素点;偶尔用到px的情况,是需要画1像素表格线或阴影线的时候。...Android系统定义了四种像素密度:低(120dpi)、中(160dpi)、高(240dpi)和超高(320dpi),它们对应的dp到px的系数分别为0.75、1、1.5和2,这个系数乘以dp长度就是像素数...dip: 与dp完全相同,只是名字不同而已。在早期的Android版本里多使用dip,后来为了与sp统一就建议使用dp这个名字了。...sp: 与缩放无关的抽象像素(Scale-independent Pixel)。...sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp

    36610

    exec与sp_executesql语法的区别详解

    的区别 1,EXEC的运用 2,sp_executesql的运用 MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和 sp_executesql;通常,sp_executesql...的运用 sp_executesql命令在SQL Server中引入的比EXEC命令晚一些,它主要为重用执行计 划提供更好的支持。...这功能使你可以建立带参数的查询字符串,这样就可以比EXEC更 好的重用执行计划,sp_executesql的构成与存储流程非常相似,不同之处在于你是动 态构建代码。...运用 sp_executesql; @params参数与定义输入/输出参数的存储流程头类似,实际上和存储流程头的语法完 全一样; @ 与调用存储流程的EXEC部分类似...运用 该功能可以防止用临时表返回数据,从而得到更高效的 代码和更少的重新编译。定义和运用输出参数的语法与存储流程类似。也就是说,你 须要在声明参数时指定OUTPUT子句。

    1K30

    Bat 批处理脚本中 %cd% 与 %~dp0 区别

    %cd% 代表的是 当前工作路径,什么意思呢?...你 bat 文件在D盘 你一旦运行 cd e: 那么工作路径 就变为e盘了,故 %cd% 就会变 可以运行在bat脚本,也可以运行命令行窗口中 %~dp0 代表的是 当前bat文件的路径 只可以运行在...代码 示例 @echo off cd d:\Program Files (x86) echo this is %%cd%%: %cd% echo this is %%~dp0: %~dp0...@pause 上述 代码 放到 C盘的Users目录 image.png 产生原因: 当前 在C盘 不能直接切换到另一个盘符的文件夹中,必须先切换盘符,再切换文件夹 。...如果 bat脚本文件 放到D盘根目录下,结果如下: image.png 特殊说明: 解决问题的光鲜,藏着磕Bug的痛苦。 万物皆入轮回,谁也躲不掉!

    1.4K20

    DOS批处理中%cd%和%~dp0的区别

    DOS批处理中%cd%和%~dp0的区别 在DOS的批处理中,有时候需要知道当前的路径。 在DOS中,有两个环境变量可以跟当前路径有关,一个是%cd%, 一个是%~dp0。    ...%cd% 可以用在批处理文件中,也可以用在命令行中; 展开后,是驱动器盘符:+当前目录,如在dos窗口中进入c:\dir目录下面,  www.2cto.com   输入:echo %cd% ,则显示为:...%cd%的内容是可以被改变的,其内容为命令的执行路径或批处理文件的执行路径。     2.%~dp0只可以用在批处理文件中,它是由它所在的批处理文件的目录位置决定的, 是批处理文件所在的盘符:+路径。...在执行这个批处理文件的过程中, 它展开后的内容是不可以改变的。...%~dp0    在C:\ 和E:\分别下执行它,输出为

    2.1K30

    shell中$(( ))、$( )与${ }的区别

    命令替换 在bash中,$( )与` `(反引号)都是用来作命令替换的。 命令替换与变量替换差不多,都是用来重组命令行的,先完成引号里的命令行,然后将其结果替换出来,再重组成新的命令行。...{var}是没有区别的,但是用${ }会比较精确的界定变量名称的范围 exp 1 [root@localhost ~]# A=Linux [root@localhost ~]# echo $AB...(在键盘上 # 在 $ 之左边) % 是去掉右边(在键盘上 % 在 $ 之右边) 单一符号是最小匹配;两个符号是最大匹配 *是用来匹配不要的字符,也就是想要去掉的那部分 还有指定字符分隔号,与*配合,决定取哪部分...,即def的长度 3 A[3]=xzy 则是将第四个组数重新定义为 xyz $(( ))与整数运算 bash中整数运算符号 符号 功能 + - * / 分别为加、减、乘、除 % 余数运算 & | ^...分别为“AND、OR、XOR、NOT”  在 $(( )) 中的变量名称,可于其前面加 $ 符号来替换,也可以不用。

    1.2K30

    Mybatis中的#与$的区别

    一、对比场景 场景:数据库分表时,需要将分表的表序号传入的sql中。...二、#与$的区别 Mybatis中的#与$的区别如下 #将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号,所以我们在插入字符串的时候不需要加''或者“”,因为这个是#帮我们加上的。...如:order by #{user_id},如果传入的值是123,那么解析成sql时的值为order by "123", 如果传入的值是id,则解析成的sql为order by "id"....将传入的数据直接显示生成在sql中,如:order by {user_id},如果传入的值是123,那么解析成sql时的值为order by 123,  如果传入的值是id,则解析成的sql为order...一般能用#的就别用$. 。 参考文章: https://blog.csdn.net/downkang/article/details/12499197

    71710

    Python中的 与 的区别

    通常C/C++中,"/ " 算术运算符的计算结果是根据参与运算的两边的数据决定的,比如:   6 / 3 = 2 ; 6,3都是整数,那么结果也就是整数2;   6.0 / 3.0 = 2.0 ; 6.0,3.0...是浮点数,那么结果也是浮点数2.0,跟精确的说,只要" / " 两边有一个数是浮点数,那么结果就是浮点数。   ...在Python2.2版本以前也是这么规定的,但是,Python的设计者认为这么做不符合Python简单明了的特性,于是乎就在Python2.2以及以后的版本中增加了一个算术运算符" // "来表示整数除法...,返回不大于结果的一个最大的整数,而" / " 则单纯的表示浮点数除法,但是,为了折中,所有2.X版本中,也是为了向后兼容,如果要使用" // ",就必须加上一条语句:   from __future_

    76520

    java中 == 与 equal 的区别

    ,而用==则不一样了,自动装箱来实例化的返回的是true,而用new来 实例化的返回的确实false;先不急着解决为什么,先来了解下equals和==的区别,到时候就可以知道答案了 equals方法最初是在所有类的基类...Object中进行定义的,源码是 public boolean equals(Object obj) { return (this == obj); } 可以看出这里定义的equals与...(null)的返回值一定为false 经过重写后就跟==有本质的区别了: equal:是用来比较两个对象内部的内容是否相等的,由于所有的类都是继承自java.lang.Object类的,所以如果没有对该方法进行覆盖的话...,调用 的仍然是Object类中的方法,而Object中的equal方法返回的却是==的判断,因此,如果在没有进行该方法的覆盖后,调用该方法是没有 任何意义的。...在java面向对象的处理中我们一般在javabean中都要选择重写equals方法,使用hibernate后,我们要生成数据库的映射文件与实体 类,这是我们就最好在实体类中进行equals方法的重写,重写时我们可以根据自己的定义来实现该方法只要遵守那五条原则

    82040
    领券