scud001

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

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

 

  1. displayMetrics.density; // density比例,160dpi的为1,240dpi的为1.5(以160dpi为标准,240/160dpi)  
  1. displayMetrics.densityDpi; // 屏幕密度。160dpi,240dpi等  
  1. displayMetrics.scaledDensity; // 字体缩放比例  
  1. displayMetrics.heightPixels; // 高上有多少个像素  

  1. displayMetrics.widthPixels; // 宽上有多少个像素  
  1. displayMetrics.xdpi; // 以dp值来表示的宽  
  1. displayMetrics.ydpi; // 以dp值来表示的高  

 

Android的长度单位详解:

1、dp,sp,px的概念

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

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

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

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

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

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

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

      扩展:WVGA现在已经不再是主流,它被FWVGA854*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,像素越高,屏幕变化不大时,密度也就越大。

    240160120三个密度值分别对应:WVGAHVGAQVGA三种屏幕分辨率。

  补充:不知道自已做的虚拟机的分辨率对应的density是多少时,可以点击AVD Manager里的details

     可以看到了。在HVGA屏幕(480*320像素)上,密度为1601px = 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(一个点对应一个分辨率)

     状态栏和标题栏的高度为:38px25dip

     横屏时,屏幕宽度为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  

2dp, sp, px的区别?

   dp也就是dipdpsp差不多。如果设置表示控件和窗体的宽度、高度等属性时,可以

   使用dpsp。但如果要设置字体,需要使用spdp与密度无关,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标签的资源

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

 

分类:

技术点:

相关文章:

  • 2021-07-01
  • 2021-08-08
  • 2021-11-08
  • 2021-10-29
  • 2021-12-16
  • 2021-12-20
  • 2021-10-19
  • 2021-12-29
猜你喜欢
  • 2021-09-01
  • 2021-11-20
  • 2021-12-20
  • 2021-12-20
  • 2021-12-09
相关资源
相似解决方案