屏幕适配

屏幕适配

基本概念

  • 屏幕尺寸(Size),指屏幕的对角线的长度,单位是英寸(Inch),1英寸=2.54厘米。

  • 屏幕分辨率(Resolution),指屏幕在横纵向上的像素点数,单位是px(Pixel),1px=1个像素点。一般以纵向像素*横向像素,如1920 * 1080。

  • 屏幕像素密度,指每英寸上的像素点数,单位是dpi(Dots Per Inch)。

  • 独立像素密度(Density independent Pixels),单位是dp、dip,基准比例 density = dpi / 160。

  • px = dp * ( dpi / 160 ) = dp * density ,当设备为160dpi时,1px=1dp。

资源匹配规则

  • values-mcc310(sim卡运营商)-en(语言)-sw320dp(屏幕最小宽度)-w820dp(屏幕最佳宽度)-h820dp(屏幕最佳高 度)-large(屏幕尺寸)-long(屏幕长短边模式)-port(当前屏幕横竖屏显示模式)-car(dock模式)-night(白天或夜 晚)-ldpi(屏幕最佳dpi)-notouch(触摸屏模类型)-keysexposed(键盘类型)-nokey(硬按键类 型)-navexposed(方向键是否可用)-nonav(方向键类型)-v26(android版本)
  • 属性是屏幕大小,向下最佳匹配。通用布局使用最低分辨率
  • 屏幕像素密度dpi,最接近屏幕像素密度匹配,遵循“先高再低”原则,然后按比例缩放
  • mdpi = ~ 160 = 1x;hdpi = ~ 240 = 1.5x;xhdpi = ~ 320 = 2x;xxhdpi = ~ 480 = 3x;xxxhdpi = ~ 640 = 4x;48 - 72 - 96 - 144 - 192 px

例子

计算5.5寸1920 * 1080的手机参数:

  • 屏幕尺寸:size = 5.5 inch
  • 屏幕分辨率:resolution = 1920 * 1080
  • 斜边的长度:length = 2203;1920^2 + 1080^2 = 2203^2
  • 屏幕像素密度:2203 / 5.5 = 400 dpi;xxhdpi
  • 独立像素密度:1dp = 400 / 160 = 2.5 px
  • values-swXXXdp:XXX = 1080 * 160 / 400 = 432;向下匹配

其他

手机中的 /system/build.prop 文件中有一行定义了系统使用的dpi(有些厂商会自行修改):

ro.sf.lcd_density=480

转换

fun px2dp(px: Float) = px / Resources.getSystem().displayMetrics.density
    
fun dp2px(dp: Float) = dp * Resources.getSystem().displayMetrics.density

fun Float.dp2px() = TypedValue.applyDimension(
    TypedValue.COMPLEX_UNIT_DIP,
    this,
    Resources.getSystem().displayMetrics
)

参考

Android屏幕适配全攻略(最权威的官方适配指导)

Android 屏幕适配方案

Android 彻底搞清“dp(dip)”

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值