关于Android屏幕适配遇到的问题及思考

最近接到需求,要将项目代码移植到另一种低分辨率的机器上运行。原先项目适配的屏幕分辨率是1280*720,新机器屏幕分辨率是1024*600,移植运行后发现界面被裁剪了,在1280*720上完整的界面,到了1024*600上就超出了很多,显示不下!

而我们xml布局明明是用dp单位的呀,换分辨率后不是应该自动变成更少的px,不会出现过大的情况呀。这是为啥呢?

其实,1dp到底实际是多少px像素,是与设备dpi有关的。经过定位发现,原来1280*720的机器是160dpi,而1024*600的机器还是160dpi!!,所以就导致dp占用的px没变化,那当然整个界面就不会自动缩小了。比如原来一个宽1280dp的View,旧机器上是1280dp*(160/160)= 1280px,所以刚好等于屏幕宽度;而换了新机器后,是1280dp*(160/160)还是1280px,而这时的屏幕宽度只有1024,那这个View就超过了屏幕宽度!!

到这里,我们又有一个疑问,物理尺寸不变(也就是对角线英寸不变)的情况下,如果分辨率减小了,那dpi不应该变小吗?怎么还是保持160呢?查阅资料发现,原来系统dpi不等于实际的物理dpi,参考《UI设计师不可不知的安卓屏幕知识》里的介绍:

“实际密度”就是我们自己算出来的密度,这个密度代表了屏幕真实的细腻程度,如上述例子中的440dpi就是实际密度,说明这块屏幕每寸有440个像素。5英寸1080×1920的屏幕密度是440,而相同分辨率的4.5英寸屏幕密度是490。如此看来,屏幕密度将会出现很多数值,呈现严重的碎片化。而密度又是安卓屏幕将界面进行缩放显示的依据,那么安卓是如何适配这么多屏幕的呢?

其实,每部安卓手机屏幕都有一个初始的固定密度,这些数值是120、160、240、320、480,我们权且称为“系统密度”。大家发现规律没有?相隔数值之间是2倍的关系。一般情况下,240×320的屏幕是低密度120dpi,即ldpi;320×480的屏幕是中密度160dpi,即mdpi;480×800的屏幕是高密度240dpi,即hdpi;720×1280的屏幕是超高密度320dpi,即xhdpi;1080×1920的屏幕是超超高密度480dpi,即xxhdpi。

安卓对界面元素进行缩放的比例依据正是系统密度,而不是实际密度

因此,虽然我们的两款屏幕分辨率不一样,但是系统ROM都是取的160dpi

那到底我们该怎么适配呢?这里我发现一篇文章写得很好,我也是按这篇文章的方法去适配的。《一种非常好用的Android屏幕适配》

问题暂时记录到这,后续如果研究了更强大的适配,我再记录。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值