Android屏幕适配

Android屏幕适配

屏幕密度

​ 手机的屏幕密度通常指的是手机屏幕的dpi(dots per inch),也就是每英寸的像素数。对于Android手机来说,常见的dpi有如下几种:

  1. ldpi:对应的dpi范围为0 ~ 120,也就是说每英寸有0到120个像素点的屏幕的屏幕密度都属于ldpi

  2. mdpi:dpi范围为120 ~ 160

  3. hdpi:dpi范围为160 ~ 240

  4. xhdpi:dpi范围为240~320

    1. xxhdpi:dpi范围为320~480
    2. xxxhdpi: dpi范围为480~560

宽高限定符

​ 宽高限定符是系统原生支持的一种适配方案,通过穷举市面上所有 Android 手机的屏幕像素尺寸来实现适配。就是通过比例换算来为不同分辨率的屏幕分别生成一套 dimens 文件

​ 宽高限定符方案有一个致命缺陷:需要精准命中分辨率才能实现适配。比如 1920 x 1080 px 的手机就一定要引用到 values-1920x1080文件夹内的 dimens 文件,否则就只能去引用默认的 values 文件夹,此时引用到的尺寸值就有可能和实际需求有很大出入,从而导致界面变形。而对于市面上层出不穷的各种分辨率,开发者想穷举完其实很麻烦,所以说,宽高限定符方案的容错率很低

smallestWidth

​ smallestWidth 也是系统原生支持的一种适配方案。smallestWidth 即最小宽度,指的是最短的那一个边长,而不考虑屏幕的方向,适配原理和宽高限定符方案一样,本质上都是通过比例换算来为不同尺寸的屏幕分别准备一套 dimens 文件,应用在运行时再去引用相匹配的 dimens 文件,以此来实现屏幕适配。

最终 dimens 文件就像以下这样:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="DIMEN_1PX">0.33dp</dimen>
    <dimen name="DIMEN_2PX">0.67dp</dimen>
    ···
    <dimen name="DIMEN_1078PX">359.33dp</dimen>
    <dimen name="DIMEN_1079PX">359.67dp</dimen>
    <dimen name="DIMEN_1080PX">360.00dp</dimen>
</resources>

类似地,我们再按照上述规则为宽度为 380 dp 的设备生成 dimens 文件:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <dimen name="DIMEN_1PX">0.35dp</dimen>
    <dimen name="DIMEN_2PX">0.70dp</dimen>
    ···
    <dimen name="DIMEN_1078PX">379.30dp</dimen>
    <dimen name="DIMEN_1079PX">379.65dp</dimen>
    <dimen name="DIMEN_1080PX">380.00dp</dimen>
</resources>

最终,为市面上主流的屏幕宽度均按照如上规则生成一套专属的 dimens 文件,每套文件均放到以宽度进行命名的 value 文件夹内,就像以下这样:

values
values-sw360dp
values-sw380dp
values-sw400dp
values-sw420dp

这样,我们就可以直接在布局文件中套用设计稿的 px 值了,应用在运行时就会自动去匹配最符合当前屏幕宽度的资源文件。例如,如果我们引用了 DIMEN_1080PX,那么不管是在宽度为 360 dp 还是 380 dp 的设备中,该引用对应的 dp 值都是刚好占满屏幕宽度,这样就实现了适配需求了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值