在进行android长度单位学习之前,先看一下获取android手机屏幕相关数值的代码:
DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();
- displayMetrics.density; // density比例,160dpi的为1,240dpi的为1.5(以160dpi为标准,240/160dpi)
- displayMetrics.densityDpi; // 屏幕密度。160dpi,240dpi等
- displayMetrics.scaledDensity; // 字体缩放比例
-
displayMetrics.heightPixels; // 高上有多少个像素
- displayMetrics.widthPixels; // 宽上有多少个像素
- displayMetrics.xdpi; // 以dp值来表示的宽
- displayMetrics.ydpi; // 以dp值来表示的高
Android的长度单位详解:
1、dp,sp,px的概念
dp或dip:(与密度无关的像素)这个和设备硬件有关系。为了支持HVGA,WVGA,和
QVGA,是一种基于屏幕密度的抽象单位。设置一些view的宽高可以使用这个。一般情
况下,在不同分辨率的屏幕上,都不会有缩放的感觉
sp: 与刻度无关的像素--放大像素,主要是处理字体的大小。
HVGA: 即VGA(640*480像素)的一半,分辨率为(480*320像素)3:2的宽高比
WVGA: 即Wide VGA,其分辨率为800 * 480像素,是扩大了的VAG(640*800)因为很多网页的宽度
都是800,所以WGVA能满足网页浏览的要求。
扩展:WVGA现在已经不再是主流,它被FWVGA(854*480),QHD(960*540)及更高的
1280*720分辨率所取代。
QVGA: 即“quarter VGA”,顾名思义,即VGA的四分之一尺寸,亦即在液晶屏幕(LCD)
上输出的分辨率为(240*320像素)
in: 表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米。例如,形容手机屏幕的大小,经常说
3.2(英)寸,3.5(英)寸,4.0(英)寸,就是指这个单位。这些尺寸的是屏幕对角线的长度。
如果手机的屏幕是3.2英寸,表示手机屏幕的可视区域对角线长度是:3.2*2.54=8.128厘米
mm:表示毫米,是屏幕的物理尺寸。
pt:表示一个点,是屏幕的物理单位,大小为1英寸的1/72
density(密度):一般为4个常用固定值:320/240/160/120,像素越高,屏幕变化不大时,密度也就越大。
240、160、120三个密度值分别对应:WVGA、HVGA、QVGA三种屏幕分辨率。
补充:不知道自已做的虚拟机的分辨率对应的density是多少时,可以点击AVD Manager里的details就
可以看到了。在HVGA屏幕(480*320像素)上,密度为160,1px = 1dp(dip) = 1sp
其实,我们在创建一个模拟器的时候,有一个选项是选择模拟器的大小,其实就是选择模拟器的屏幕
大小,就是我们常说的分辨率。
Density(密度):意思就是单位面积内容量的大小。表示每英寸有多少个显示点。
HVGA屏幕 density=160
WVGA屏幕 density=240
QVGA屏幕 density = 120
==========================================================
在不同density(密度)下,屏幕分辨率的信息:
WVGA屏幕上,density = 240时,分辨率为480 * 800
density = 120时,分辨率为240 * 400
更具体的是:
-->WVGA屏幕,density=240时,屏幕分辨率为:480px*800px(一个点对应一个分辨率)。
状态栏和标题栏的高度为:38px或25dip
横屏时,屏幕宽度为800px或者800dip,工作区域高度为442px或者480dip
竖屏时,屏幕宽度为480px或者480dip,工作区域高度为 762px或者775dip
-->density=160时,屏幕分辨率为:320px*533px(3个点对应两个分辨率)
状态栏和标题栏高度为:25px或者25dip
横屏时,屏幕宽度为533px或者800dip,工作区域高度是295px或者480dip
竖屏时,屏幕宽度为320px或者480dip,工作区域高度是508px或者775dip
-->density=120时,屏幕分辨率为240px*400px(两个点对应一个分辨率)
横屏时,屏幕宽度为400px或者800dip,工作区域高度是211px或者480dip
竖屏时,屏幕宽度为240px或者480dip,工作区域高度是381px或者775dip
2、dp, sp, px的区别?
dp也就是dip;dp和sp差不多。如果设置表示控件和窗体的宽度、高度等属性时,可以
使用dp或sp。但如果要设置字体,需要使用sp。dp与密度无关,sp除了与密度无关外,
还与scale无关。如果屏幕密度为160(好像是240),这时dp,sp,px是一样的。1dp = 1sp = 1px。
例如在屏幕密度为160时,将TextView的宽度设置为160px,当在屏幕大小不变,屏幕
密度变为320时,那么TextView的宽度只有密度为160时的一半。
如果TextView的宽度设置为“160dp”或“160sp”,在屏幕密度为160时,系统会自动
将Width属性设置为160px,在屏幕密度为320时,系统会自动将Width属性设置为320px
也就是160 * 320 / 160,其中320 / 160可称为密度比例因子。也就是说,如果使用dp或
sp,系统会自动根据屏幕密度的变化而进行转换。
3、apk的资源包中,当屏幕density=240时,使用hdpi标签的资源
当屏幕 density=160时,使用mdpi标签的资源
当屏幕density=120时,使用ldpi标签的资源
不添加任何标签的资源,是各种分辨率下共用的。