今日头条屏幕适配


Android dp适配的来源

px适配

还不熟悉dp、dpi、px、density 的区别,可以先去看上一篇文章《Android dp、dpi、px的区别》。现在我们先来看一张设计图,一般我们拿到设计图,可能是是这样的,上面标注的全部都是px,像素尺寸。如果布局当中用px做单位的话,就会涉及到控件物理尺寸大小不一致的问题!假如一个控件是100px ,那么在两种不同分辨率手机上,控件的实际物理尺寸是不一样的。比如,设备1的density=1;设备2的density=2;那么控件在设备1上的物理尺寸就是 100dp,在设备2上的物理尺寸就是50dp(dp是物理尺寸,不会变的);这样用px适配就会存在很大的问题!

dp适配

因为px适配存在诸多问题,所以android官方推荐我们用DP去适配各种类型的手机。但是dp就能完全解决所有的适配的问题嘛?答案当然是否定的。引用《一种极低成本的Android屏幕适配方式》一段话,感觉举的例子非常好!

“假设我们UI设计图是按屏幕宽度为360dp来设计的,那么在上述设备上,屏幕宽度其实为1080/(440/160)=392.7dp,也就是屏幕是比设计图要宽的。这种情况下, 即使使用dp也是无法在不同设备上显示为同样效果的。 同时还存在部分设备屏幕宽度不足360dp,这时就会导致按360dp宽度来开发实际显示不全的情况。
而且上述屏幕尺寸、分辨率和像素密度的关系,很多设备并没有按此规则来实现, 因此dpi的值非常乱,没有规律可循,从而导致使用dp适配效果差强人意。”

探索今日头条适配新方式

关键词:density

我们布局当中,尺寸的转化,最终都是调用 TypedValue#applyDimension(int unit, float value, DisplayMetrics metrics) 来进行的。

可以看一下四个参数:unit:单位(px、dip还是sp等等)、value:长度值的大小、metrics:Android提供的记述屏幕的有关信息的一种结构,诸如其尺寸,密度和字体缩放的一般信息。density(密度) 的意思就是 1 dp 占当前设备多少像素。可以看到,当用dp和sp做单位时,返回的像素尺寸大小都是和density(密度)有关系的。

  • DisplayMetrics#density 就是上述的density

  • DisplayMetrics#densityDpi 就是上述的dpi

  • DisplayMetrics#scaledDensity 字体的缩放因子,正常情况下和density相等,但是调节系统字体大小后会改变这个值

今日头条就从density入手,根据公式px = density * dp;如果设计图一定为360dp,那可以控制density,来控制px的大小。(或者是说控件在不同类型手机显示相同比例的话,可以来修改density)

关键词:单维度适配

一般情况下,我们能够单维度去适配我们的手机就可以了。比如我们适配手机,假如屏幕高维度可滑的情况下,我们只去适配宽维度即可。如果适配平板,在宽维度可滑的情况下,我们去适配高维度即可。

最终方案

假如,我们进行宽维度适配,最终的问题就是如何计算density ,根据公式px = density * dp,如果我们知道屏幕的总px和设计图宽度的总dp。那么density = 设备真实宽(单位px) / 设计图宽度的总dp。接下来,将我们计算出的density,在系统中修改即可。

参考文章:

《骚年你的屏幕适配方式该升级了!-今日头条适配方案》

《一种极低成本的Android屏幕适配方式》

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值