Android 屏幕适配方案

  • 单位:dp,可以保证在不同屏幕像素密度的设备上显示相同的效果,是安卓特有的长度单位。
  • 场景例子:假如同样都是画一条长度是屏幕一半的线,如果使用px作为计量单位,那么在480x800分辨率手机上设置应为240px;在320x480的手机上应设置为160px,二者设置就不同了;如果使用dp为单位,在这两种分辨率下,160dp都显示为屏幕一半的长度。
  • dp与px的转换:1dp = (dpi / 160 ) * 1px;
密度类型 代表的分辨率(px) 屏幕密度(dpi) 换算
低密度(ldpi) 240 x 320 120 1dp = 0.75px
中密度(mdpi) 320 x 480 160 1dp=1px
高密度(hdpi) 480 x 800 240 1dp=1.5px
超高密度(xhdpi) 720 x 1280 320 1dp=2px
超超高密度(xxhdpi) 1080 x 1920 480 1dp=3px

6、独立比例像素(sp):

  • 含义:scale-independent pixel,叫sp或sip
  • 单位:sp,字体大小专用单位 Android开发时用此单位设置文字大小,可根据字体大小首选项进行缩放; 推荐使用12sp、14sp、18sp、22sp作为字体大小,不推荐使用奇数和小数,容易造成精度丢失,12sp以下字体太小。

7、sp 与 dp 的区别:

  • dp只跟屏幕的像素密度有关;
  • sp和dp很类似但唯一的区别是,Android系统允许用户自定义文字尺寸大小(小、正常、大、超大等等),当文字尺寸是“正常”时1sp=1dp=0.00625英寸,而当文字尺寸是“大”或“超大”时,1sp>1dp=0.00625英寸。类似我们在windows里调整字体尺寸以后的效果——窗口大小不变,只有文字大小改变。

追到android源码,发现系统内部用applyDimension() (路径:android.util.TypedValue.applyDimension())将所有单位都转换成px 再处理:

/**

  • Converts an unpacked complex data value holding a dimension to its final floating
  • point value. The two parameters unit and value
  • are as in {@link #TYPE_DIMENSION}.
  • @param unit The unit to convert from.
  • @param value The value to apply the unit to.
  • @param metrics Current display metrics to use in the conversion –
  •            supplies display density and scaling information.
    
  • @return The complex floating point value multiplied by the appropriate
  • metrics depending on its unit.
    */
    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;
    }

可以发现dp和sp的区别在于density和scaledDensity两个值上;

/**

  • The logical density of the display. This is a scaling factor for the
  • Density Independent Pixel unit, where one DIP is one pixel on an
  • approximately 160 dpi screen (for example a 240x320, 1.5"x2" screen),
  • providing the baseline of the system’s display. Thus on a 160dpi screen
  • this density value will be 1; on a 120 dpi screen it would be .75; etc.
  • 17
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值