适配原理(以适配屏幕宽度为例)
让所有设备的宽度dp值等于UI设计图的宽度dp值,目前适配都是以dp单位进行适配。
由px = density * dp; 得知px 每个设备值不一样,所以只能通过改density,使得每个设备的宽度dp值等于UI设计图dp值。
基础知识
- 计算公式
android中的dp在渲染前会将dp转为px,计算公式:
density = dpi / 160;
px = dp * (dpi / 160);
dpi 是整个屏幕的屏幕密度,dp是分宽高,对应px宽高
- 源码变量
先来熟悉下 DisplayMetrics 中和适配相关的几个变量:
DisplayMetrics#density 就是上述的density
DisplayMetrics#densityDpi 就是上述的dpi
DisplayMetrics#scaledDensity 字体的缩放因子,正常情况下和density相等,但是调节系统字体大小后会改变这个值
如何根据远程手机截图算出屏幕密度dpi方式,纠正屏幕未适配问题
使用PxCook 软件,标注图片中的长度,以dp和px的两个值做切换,即可根据px = density * dp。 算出 density(图1)再根据 density = dpi / 160 即可算出屏幕密度dpi。
使用模拟器模拟各种设备进行屏幕适配测试
通过模拟器动态设置界面显示参数,进行屏幕适配测试。如图二进行设置,即可添加各式各样的设备进行屏幕适配,便不再需要多台真实安卓硬件设备,图三 四即为添加好的各种屏幕模拟器。