android-屏幕适配

Android

单位

    px(pixels):(像素) 屏幕上可见像素点
    dip/dp(Density independent pixels): 设备无关像素的长度单位。
    sp(放大像素):scaled pixels,字体显示 best for text size (字体大小设置而变化)
    
    dpi:(dots per inch )一英寸多少个像素点。常见取值 120,160,240。像素密度
    density:密度。常见取值 1.5 , 1.0 。和标准dpi的比例(160px/inc)
    
    in (英寸):长度单位
    mm(毫米):长度单位
    pt:point(磅)一个标准的长度单位,1pt = 1/72英寸

适配

  • TypedValue
    • applyDimension
    public static float applyDimension(int unit, float value,
                                       DisplayMetrics metrics)
    {
        switch (unit) {
        case COMPLEX_UNIT_PX:
            return value;
        case COMPLEX_UNIT_DIP:
            return value * metrics.density;
        case COMPLEX_UNIT_SP:
            return value * metrics.scaledDensity;
        case COMPLEX_UNIT_PT:
            return value * metrics.xdpi * (1.0f/72);
        case COMPLEX_UNIT_IN:
            return value * metrics.xdpi;
        case COMPLEX_UNIT_MM:
            return value * metrics.xdpi * (1.0f/25.4f);
        }
        return 0;
    }

  • 计算
    5.2英寸,分辨率为1080×1920

      屏幕尺寸->屏幕对角线长度,多以英寸为单位->5.2 in
      
      物理宽度->1080/√ ̄(1080×1080+1920×1920)=w/5.2->1080/√ ̄(1080×1080+1920×1920) * 5.2=2.55
      
      dpi = 对角线像素点数(根据分辨率通过勾股定理获取)/屏幕尺寸
      像素密度dpi->√ ̄(1080×1080+1920×1920)/5.2=423.635->420dpi
      or
      1080/2.55=423.529->420dpi (px/in) 
      
      密度density->dpi/160=2.625->0.75 1 2 3
      
      sp->sp*dpi/160=px->sp*density=px->

你可能感兴趣的:(android-屏幕适配)