屏幕适配基本概念

我的手机为 :华为 p8青春版 1280* 720 5 英寸 dpi 293

dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算

Android-屏幕适配全攻略(绝对详细)(一)

Android中px、sp、dip的区别

Android屏幕density, dip等相关概念总结

1. 基本概念

  • dip : Density independent pixels ,设备无关像素。
  • dp :就是dip
  • px : 像素
  • dpi :dots per inch , 指每英寸上的像素点数。常见取值 120,160,240。我一般称作像素密度,简称密度

  • density : 直接翻译的话貌似叫 密度。常见取值 1.5 , 1.0 。和标准dpi的比例(160px/inc)

  • 屏幕分辨率 : 横纵向上的像素点数,单位是px,1px=1像素点,常见取值 480X800 ,320X480,1280*720
  • 屏幕尺寸: 屏幕对角线的长度。电脑电视同理。==单位是英寸,1英寸=2.54厘米==
  • 屏幕比例的问题。因为只确定了对角线长,2边长度还不一定。所以有了4:3、16:9这种,这样就可以算出屏幕边长了。

  • sp:Scale-Independent Pixels的缩写,可以根据文字大小首选项自动进行缩放。Google推荐我们使用12sp以上的大小,通常可以使用12sp,14sp,18sp,22sp,最好不要使用奇数和小数。

    1. 应用

    扫描二维码关注公众号,回复: 4877352 查看本文章

    density 与 densityDpi 区别

 metrics.density; 
  metrics.densityDpi;
  
densityDpi : 就是我们常说的dpi。

  density      :  其实是 DPI / (160像素/英寸) 后得到的值。  
  
dpi的单位是 像素/英寸,比较符合物理上面的密度定义,密度不都是单位度量的值么,所以我更喜欢把dpi叫像素密度,简称密度,density还是就叫density。
  1. 各单位间转换

3.1 计算dpi 

image

3.2 计算 dp 与 px

我们写布局的时候,肯定还是要知道1个dp到底有多少px的。

  换算公式如下: dp = (DPI/(160像素/英寸))px = density px

  注意,这里都是带单位的。px是单位,dp是单位,density没单位。

  为了方便,假设dpi是240 像素/英寸 , 那么density就是1.5

  那么就是 dp=1.5px ,注意这是带了单位的,也就是 设备无关像素 = density 像素

  那么转换为数值计算的话,应该是下面这个式子

    //1DP等于多少像素 PX 

  PX = density * DP

也就是
  像素值 = density * 设备无关像素值 ,请注意这里有个值字。

3.3 dpi

为啥 标准dpi = 160
(1)Android Design [1] 里把主流设备的 dpi 归成了四个档次,120 dpi、160 dpi、240 dpi、320 dpi

  实际开发当中,我们经常需要对这几个尺寸进行相互转换(比如先在某个分辨率下完成设计,然后缩放到其他尺寸微调后输出),一般按照 dpi 之间的比例即 2:1.5:1:0.75   来给界面中的元素来进行尺寸定义。

  也就是说如果以 160 dpi 作为基准的话,只要尺寸的 DP 是 4 的公倍数,XHDPI 下乘以 2,HDPI 下乘以 1.5,LDPI 下乘以 0.75 即可满足所有尺寸下都是整数 pixel 。

  但假设以 240 dpi 作为标准,那需要 DP 是 3 的公倍数,XHDPI 下乘以 1.333,MDPI 下乘以 0.666 ,LDPI 下除以 2

  而以 LDPI 和 XHDPI 为基准就更复杂了,所以选择 160 dpi

     (2)这个在Google的官方文档中有给出了解释,因为第一款Android设备(HTC的T-Mobile G1)是属于160dpi的。
 特定机型的density是确定的,其取值取决于dpi,

如果 dpi == 160, 则density = 1; 

如果 dpi == 120, 则density = 0.75; 

如果 dpi = 320, 则density = 2; 

依次类推,也就是说

density = (dpi*1.0)/ 160;
  1. dip
    dip 的取值和 dpi 有关,如果 为
    dpi=160 density =1 1dp=1px
    dpi=320 density =2 1dp=2px
   dip (dp): device independent pixel。dp
   (dip)是最常用也是最难理解的尺寸单位。与像素密度密切
   相关。Android系统定义了四种像素密度:低(120dpi)
   、中(160dpi)、高(240dpi)和超高(320dpi),它
   们对应的dp到px的系数分别为0.75、1、1.5和2,这个系
   数乘以dp长度就是像素数。例如界面上有一个长度为
   “80dp”的图片,那么它在240dpi的手机上实际显示为
   80x1.5=120px,在320dpi的手机上实际显示为
   80x2=160px。如果你拿这两部手机放在一起对比,会发
   现这个图片的物理尺寸“差不多”,这就是使用dp作为单
   位的效果。
 屏幕大小和密度对照表
 屏幕                 宽度          高度           尺寸          大小     密度  
  Type              (Pixels)     (Pixels)   Range (inches)      Size      Group

  QVGA                240          320        2.6 - 3.0         Small      Low
  WQVGA            240          400        3.2 - 3.5         Normal     Low
  FWQVGA          240          432        3.5 - 3.8         Normal     Low
  HVGA                320          480        3.0 - 3.5         Normal     Medium
  WVGA               480          800        3.3 - 4.0         Normal     High
  FWVGA             480          854        3.5 - 4.0         Normal     High
  WVGA               480          800        4.8 - 5.5         Large      Medium
  FWVGA             480          854        5.0 - 5.8         Large      Medium

6. px 与 dx 转换

1、px :是屏幕的像素点
2、dp :一个基于density的抽象单位,如果一个160dpi的屏幕,1dp=1pxdip 
3、转换方式如下
public class DensityUtil {  

    /** 
     * 根据手机的分辨率从 dp 的单位 转成为 px(像素) 
     */  
    public static int dip2px(Context context, float dpValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (dpValue * scale + 0.5f);  
    }  

    /** 
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp 
     */  
    public static int px2dip(Context context, float pxValue) {  
        final float scale = context.getResources().getDisplayMetrics().density;  
        return (int) (pxValue / scale + 0.5f);  
    }  
}

猜你喜欢

转载自blog.csdn.net/hyl411136528/article/details/53932546