在进行android长度单位学习之前,先看一下获取android手机屏幕相关数值的代码:

       

DisplayMetrics displayMetrics = getContext().getResources().getDisplayMetrics();

 

1. displayMetrics.density; // density比例,160dpi的为1,240dpi的为1.5(以160dpi为标准,240/160dpi)
2. 
3. displayMetrics.densityDpi; // 屏幕密度。160dpi,240dpi等
4. 
5. displayMetrics.scaledDensity; // 字体缩放比例
6. 
7. displayMetrics.heightPixels; // 高上有多少个像素
8. 
9. displayMetrics.widthPixels; // 宽上有多少个像素
10. 
11. displayMetrics.xdpi; // 以dp值来表示的宽
12. 
13. displayMetrics.ydpi; // 以dp值来表示的高

 

Android的长度单位详解:

1、dp,sp,px的概念

或dip:(与密度无关的像素)这个和设备硬件有关系。为了支持HVGA,WVGA,和

,是一种基于屏幕密度的抽象单位。设置一些view的宽高可以使用这个。一般情

   况下,在不同分辨率的屏幕上,都不会有缩放的感觉

与刻度无关的像素--放大像素,主要是处理字体的大小。

即VGA(640*480像素)的一半,分辨率为(480*320像素)3:2的宽高比

即Wide VGA,其分辨率为800 * 480像素,是扩大了的VAG(640*800)因为很多网页的宽度

800,所以WGVA能满足网页浏览的要求。

WVGA现在已经不再是主流,它被FWVGA(854*480),QHD(960*540)及更高的

分辨率所取代。

即“quarter VGA”,顾名思义,即VGA的四分之一尺寸,亦即在液晶屏幕(LCD)

(240*320像素)

表示英寸,是屏幕的物理尺寸。每英寸等于2.54厘米。例如,形容手机屏幕的大小,经常说

(英)寸,3.5(英)寸,4.0(英)寸,就是指这个单位。这些尺寸的是屏幕对角线的长度。

3.2英寸,表示手机屏幕的可视区域对角线长度是:3.2*2.54=8.128厘米

表示毫米,是屏幕的物理尺寸。

表示一个点,是屏幕的物理单位,大小为1英寸的1/72

密度):一般为4个常用固定值:320/240/160/120,像素越高,屏幕变化不大时,密度也就越大。

、160、120三个密度值分别对应:WVGA、HVGA、QVGA三种屏幕分辨率。

density是多少时,可以点击AVD Manager里的details就

HVGA屏幕(480*320像素)上,密度为160,1px = 1dp(dip) = 1sp

     其实,我们在创建一个模拟器的时候,有一个选项是选择模拟器的大小,其实就是选择模拟器的屏幕

     大小,就是我们常说的分辨率。

密度):意思就是单位面积内容量的大小。表示每英寸有多少个显示点。

屏幕 density=160

屏幕 density=240

屏幕 density = 120

     ==========================================================

density(密度)下,屏幕分辨率的信息:

屏幕上,density = 240时,分辨率为480 * 800

时,分辨率为240 * 400

     更具体的是:

屏幕,density=240时,屏幕分辨率为:480px*800px(一个点对应一个分辨率)。

38px或25dip

800px或者800dip,工作区域高度为442px或者480dip

480px或者480dip,工作区域高度为 762px或者775dip

时,屏幕分辨率为:320px*533px(3个点对应两个分辨率)

25px或者25dip

533px或者800dip,工作区域高度是295px或者480dip

320px或者480dip,工作区域高度是508px或者775dip

时,屏幕分辨率为240px*400px(两个点对应一个分辨率)

400px或者800dip,工作区域高度是211px或者480dip

240px或者480dip,工作区域高度是381px或者775dip  

2、dp, sp, px的区别?

也就是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或

,系统会自动根据屏幕密度的变化而进行转换。

3、apk的资源包中,当屏幕density=240时,使用hdpi标签的资源

density=160时,使用mdpi标签的资源

density=120时,使用ldpi标签的资源

    不添加任何标签的资源,是各种分辨率下共用的。