Android进阶 - Android 的屏幕适配

参考链接:
dpi 、 dip 、分辨率、屏幕尺寸、px、density 关系以及换算
Android屏幕适配方案总结

抖音官方文档:一种极低成本的Android屏幕适配方式

Android屏幕适配实例教程「今日头条,AutoSize」
Android屏幕适配实例教程「今日头条,AutoSize」源码链接

  • dip或dp(device independent pixels,设备独立像素):一种基于屏幕密度的抽象单位。在每英寸160点的显示器上,1dip=1px.单随着屏幕的密度改变,dip和px的换算也会发生改变。
  • px : 像素
  • dpi(像素密度) :dots per inch , 直接来说就是一英寸多少个像素点。常见取值 120,160,240。我一般称作像素密度标准dpi的比例(160px每英寸)**
  • density(屏幕密度) : 直接翻译的话貌似叫 屏幕密度 (density = dpi / 160)
密度类型代表的分辨率(px)屏幕像素密度(dpi)dp与px的换算density
低密度(ldpi)240*3201201dp = 0.75px0.75
中密度(mdpi)320*4801601dp = 1px1
高密度(hdpi)480*8002401dp = 1.5px1.5
超高密度(xhdpi)720*12803201dp = 2px2
超超高密度(xxhpi)1080*19204801dp = 3px3
  • 屏幕尺寸、分辨率、像素密度三者关系
    在这里插入图片描述
    举个例子:屏幕分辨率为:1920*1080,屏幕尺寸为5吋的话,那么dpi为440。
    在这里插入图片描述

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

android中的dp在渲染前会将dp转为px,计算公式:

px = density * dp;

dp = px / density

density = dpi / 160;

px = dp * (dpi / 160);

而dpi是根据屏幕真实的分辨率和尺寸来计算的,每个设备都可能不一样的。

寻找适配突破口:
从dp和px的转换公式 :px = density * dp;

可以看出,如果设计图宽为360dp,想要保证在所有设备计算得出的px值都正好是屏幕宽度的话,我们只能修改 density 的值。

这里假设UI设计给我们一张640dp(高) x 360dp(宽)的设计图,那么我们如果要适配所有屏幕,则 density = 设备屏幕的真实宽度(单位:px) / 360dp,这样我们的1dp在所有设备屏幕的宽中所占的比例都是一样的,为1/360,然后我们只要直接照抄设计图中的dp值,宽度就适配啦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值