Android屏幕适配(车机,平板,手机)

Android屏幕适配

前两天老大要求把车机项目放在手机和平板上也能适配,于是有了这篇文章。

什么是屏幕适配

面试的时候总是会被问到有没有做过屏幕适配,我的回答都是写dp就行了,系统会根据不同的像素密度在屏幕上显示对应的像素值。其实我也不知道正确答案是什么,我估计很多面试官自己也不懂(这个世界就是个巨大的草台班子)那今天就分析下什么是屏幕适配
先看下100dp在平板和手机上的显示效果
在这里插入图片描述
乍一看好像也没问题。仔细看看手机里横向估计只能装下3个方块,而平板肉眼一看就知道肯定不止3个。问题出在像素密度上,接下来我拿几个设备和模拟器进行测试

设备种类分辨率(PX)像素密度(DPI)100dp对应px值(PX)
车机2560✖️1600160100
平板2880✖️1600400250
手机12340✖️1080450281
手机 22400✖️1080480300

根据公式反推下 dp = px / (DPI/160)

设备种类分辨率(PX)像素密度(DPI)100dp对应px公式计算dp
车机2560✖️1600160100100
平板2880✖️1800400250100
手机12340✖️108045028199.91…11
手机22400✖️1080480300100

可以看到平板方块是占屏幕接近1/7,手机2是5/18接近三分之一,如果多几个方块,显然是塞不下了,这时候就需要缩小方块,具体多大才可以呢,这时候就需要引入两个概念,限定符和最小宽度dp

限定符

这个很容易理解就是mdpi,hdpi,xhdpi等
根据表格

限定符密度范围(DPI)缩放比例(基于mdpi)
ldpi~1200.75
mdpi~1601
hdpi~2401.5
xhdpi~3202.0
xxhdpi~4803.0
xxxhdpi~6404.0

可得

设备种类限定符
车机mdpi
平板xxhdpi
手机1xxhdpi
手机2xxhdpi

系统会根据设备的像素密度选择对应的values-Ndpi中的dimen文件,这边可以看到手机和平板最后都会选到xxhdpi,结果跟上图没区别

最小物理宽度DP

就是屏幕的最窄的一个边的dp值,可以获取屏幕宽然后px2dp得到,通常会在res里以sw400dp这样形式的出现

设备种类分辨率(PX)像素密度(DPI)swdp
车机2560✖️16001601600
平板2880✖️1800400720
手机12340✖️1080450384
手机22400✖️1080480360

假设设计图基于2560px✖️1600px,设计的图标是100px✖️100px
根据公式 dp = px / (dpi/160) 车机上100px = 100dp

sw1600dp/dimen.xml
<dimen>dp_100>100dp</dimen>

这时候要适配手机2就需要给平板再创建一个文件values-sw360dp/dimen.xml
计算要注意等比例换算
100px / x = 1600px / 1080px
x = 67.5px
再把x丢到dp = px / (dpi)/160 中得到 dp = 22.5dp 取 23dp

sw360dp/dimen.xml
<dimen>dp_100>23dp</dimen>

同理:平板sw720dp/dimen.xml

sw720dp/dimen.xml
<dimen>dp_100>45dp</dimen>

手机1就没有再写,手机1会使用最接近它的sw360dp中的值,会有一点点细微偏差

最后总结

1.创建values-Ndpi创建个数有限不够精确,属于像素密度分类,想要精准需要用到swdp,可以根据不同的设备创建对应的文件
2.如果只是开发直板手机,直接用dp,这个方案只用来解决又要大屏又要小屏,既要又要还要那种

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值