android曲面屏触摸事件,Android屏幕适配完美解决方案(曲面屏手机也是小Case)

纸上得来终觉浅 绝知此事要躬行。

安卓中最头疼的一个问题就是屏幕适配,然而现在网上关于屏幕适配的博客都是纸上谈兵:dp的概念、dp转px。只有少数博客才是讲到点,比如 鸿洋 大神的 Android 屏幕适配方案。

需要适配的机型

从左到右依次是魅族,华为,小米手机。我们可以看到它们的物理尺寸不尽相同。

18345b839e0c

适配机型

各机型属性

我们写个小Demo测量出 状态栏高度,导航栏高度,屏幕宽度,屏幕高度,需要注意的是,这四个值单位都是像素。很多小伙伴都容易困惑与像素与厘米的区别,在测量结果中我们可以看到,三个手机都是宽1080px,高1920px(华为机计算应该是144+1776),但是三个手机的物理尺寸都是不相同的,所以我们可以得出结论:

px 和 cm 没有任何关系

18345b839e0c

各机型属性

我们同样还可以得出一个结论:

1080x1920指的是显示屏,不包括手机外壳

Values

Ok,我们现在来看一下values文件,这个是屏幕适配核心。

18345b839e0c

values

可以看到,我们分别为1080x1920和1776x1080创建了两个values文件,这样如果手机分辨率是1080x1920时,如果你的代码中有

R.dimen.xxx这样的代码系统会自动在1920x1080文件夹下的dimen文件中查找。同理,如果手机分辨率是1080x1776,系统会自动在1776x1080文件夹下的dimen文件中查找,这样我们创建多个values文件是不是就达到的屏幕适配?

18345b839e0c

values

我们可以看到,在values-1920x1080文件夹下的dimen文件中dp2px为540px,恰好是1080的一半,而在values-1776x1080文件夹下的dimen文件中则是1080,正好满屏。

18345b839e0c

效果图

看运行效果图我们能发现,在华为机(1080x1776)中是满屏,而在小米机(1080x1920)则是半屏,所以我们完全可以通过values文件来进行屏幕适配!

授人以渔

这里我借用 鸿洋 大神的一个类。

18345b839e0c

GenerateValueFiles

我们打开该java文件,并进行如下修改:

18345b839e0c

baseW and baseH

18345b839e0c

1080x1776

18345b839e0c

javac

我们会看到目录下多了res文件夹。

18345b839e0c

res

通常我们把这些values文件夹复制到我们项目中的res文件夹下就可以了。

18345b839e0c

values

分析

我们看看能不能真的进行屏幕适配。

假设现在UI给了你一张720x1280的图,我们那个java文件的baseW和baseH分别是1080,1920,所以我们需要将UI妹子给的标注图的px进行转换(实际运用中可以把baseW和baseH改成标注图的分辨率)。

假设一个按钮的高为10px,但这是720x1280的图,所以我们要先转换成1080x1920的像素, 10x1920/1280 = 15px,所以我们直接使用@dimen/y15就可以,但是我们可还有个1080x1776的华为机需要适配呢!10px在华为机中的像素可是 10x1776/1280 = 13.875px,我们去查看values-1776x1080文件夹下dimen文件。

18345b839e0c

values-1776x1080

可以发现,@dimen/y15在1776x1080的手机中是13.87px,因此实现啦屏幕适配!

GenerateValueFiles.java下载地址 : 猛戳此处

补充

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值