1、相关概念
- 硬件 / 物理参数:
- 软件概念:
注意:若两个设备的高宽使用dp值表示,若相同,则表示设备高宽相同,则无需适配,直接可使用同套布局参数。
高宽使用dp值表示的计算公式:
width=widthPx/dp; dp = dpi / 160; dpi= ppi ;
所以得出:width(dp)=widthPx/(ppi/160);
2、在此基础上就有个适配方案:
适配density,使得相同dp值,获取的对应的px不同,占比整体宽度比例相同,从而达到适配效果。
density = 设备真实宽(单位px) / 360(设计稿的宽度值,单位为dp)
优点:
(1)使用成本非常低,操作非常简单,使用该方案后在页面布局时不需要额外的代码和操作,这点可以说完虐其他屏幕适配方案。
(2)侵入性非常低,该方案和项目完全解耦,在项目布局时不会依赖哪怕一行该方案的代码,而且使用的还是 Android官方的 API,意味着当你遇到什么问题无法解决,想切换为其他屏幕适配方案时,基本不需要更改之前的代码,整个切换过程几乎在瞬间完成,会少很多麻烦,节约很多时间。
(3)可适配三方库的控件和系统的控件(不止是 Activity和 Fragment,Dialog、Toast等所有系统控件都可以适配),由于修改的 density 在整个项目中是全局的,所以只要一次修改,项目中的所有地方都会受益。
(4)不会有任何性能的损耗。
缺点: 只需要修改一次 density,项目中的所有地方都会自动适配,这个看似解放了双手,减少了很多操作,但是实际上反应了一个缺点,那就是只能一刀切的将整个项目进行适配,但适配范围是不可控的,当项目中的系统控件、三方库控件等非我们项目自身设计的控件,它们的设计图尺寸并不会和我们项目自身的设计图尺寸一样,这时就会出现问题,当某个系统控件或三方库控件的设计图尺寸和我们项目自身的设计图尺寸差距非常大时,这个问题就越严重。
但是说实话,今日头条团队提供的这个屏幕适配方案依旧非常的优秀。
3、其他情况的适配方案:
1、约束布局的使用,按百分比控制布局高宽
2、使用smallestWidth,加载不同dp值,加载不同布局,以及华为的栅格化思维。