Android 屏幕适配

一、为什么要做屏幕适配

由于Android系统的开放性,任何用户、开发者、OEM厂商、运营商都可以对Android进行定制,于是导致碎片化,包括Android系统碎片化(小米定制的MIUI、魅族定制的flyme、华为定制的EMUI),Android机型屏幕尺寸碎片化(5寸、5.5寸、6寸),Android屏幕分辨率碎片化(320x480、480x800、720x1280、1080x1920)。当出现碎片化时,就很容易出现同一元素在不同手机上显示不同的问题。

所以屏幕适配使得某一元素在Android不同尺寸、不同分辨率的手机上具备相同的显示效果。

二、dp与px的转换

在Android中,规定以160dpi(即屏幕分辨率为320x480)为基准:1dp=1px

密度类型

代表的分辨率(px)

屏幕密度(dpi)

换算(px/dp)

比例

低密度(ldpi)

240x320

120

1dp=0.75px

3

中密度(mdpi)

320x480

160

1dp=1px

4

高密度(hdpi)

480x800

240

1dp=1.5px

6

超高密度(xhdpi)

720x1280

320

1dp=2px

8

超超高密度(xxhdpi)

1080x1920

480

1dp=3px

12

三、解决方式

1、“布局”匹配

  • 根据屏幕的配置来加载相应的UI布局,需要为不同屏幕尺寸的设备设计不同的布局,使用最小宽度(Smallest-width)限定符,如layout-sw600dp,即无论是宽度还是高度,只要大于或等于600dp,就采用layout-sw600dp目录下的布局,其他的就使用默认layout目录下的布局。
  • 使得布局元素自适应屏幕尺寸,使用相对布局(RelativeLayout),禁用绝对布局(AbsoluteLayout)
  • 使用布局别名,可以解决文件名的重复从而带来一些列后期维护的问题。

2、“布局组件”匹配

  • 使得布局组件自适应屏幕尺寸,使用"wrap_content"、"match_parent"和"weight“来控制视图组件的宽度和高度。
  • 在不同屏幕密度上,使用密度无关像素dp、sp。

3、“图片资源”匹配

  • 可以使用自动拉伸位图:.9图片类型,放在drawable文件夹
  • 提供备用位图(符合屏幕尺寸的图片资源),即一套分辨率=一套位图资源,放在 res/ 下的相应子目录中(mdpi、hdpi、xhdpi、xxhdpi)

系统自动适配图片的方式

系统会先选择与机器密度匹配的目录文件,如果没有,再依次找更高密度的目录,如果还没有,再找低密度的,最后找drawable里的。
如当前设备的dpi是320,系统会优先去drawable-xhdpi目录查找,如果找不到,会依次查找xxhdpi → xxxhdpi → hdpi → mdpi → ldpi → drawable

4、解决控件的屏幕尺寸和屏幕密度的适配问题

问题

  • 因为屏幕密度(分辨率)不一样,所以不能用固定的px
  • 因为屏幕宽度不一样,所以要小心的用dp

解决

  1. 根据不同屏幕密度,控件选择对应的像素值大小。
  2. 以某一分辨率为基准,生成所有分辨率对应像素数列表。
  3. 把生成的各像素数列表放到对应的资源文件res/values-480x320等。

参考链接 Carson带你学Android:屏幕适配-最全面的解决方案 - 简书

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值