大纲
- 使用dp而不是px
- 尽量使用自动适配布局,而不要指定分辨率
- 使用宽高限定符
- values-1080x1920,以1080P为基准计算每种常见分辨率对应的尺寸。
- 需要尽可能全的添加各种设备的分辨率(有工具)
- 容错性不足,如果设备分辨率不能精确匹配对应限定符,会默认使用统一默认的dimens
- 第三方自动适配UI框架
- 原理:自定义RelativeLayout,在onMeasure中对控件分辨率做变换
- 第三方框架,维护性很成问题
- 一些自定义View,处理比较麻烦
- 最小宽度限定符,类似宽高限定符
- values-sw240dp,同样以某一dp宽度为基准计算其他宽度dp的值
- values-sw360dp、values-sw480dp
- 相比宽高限定符,最小宽度限定符不进行精确匹配,会遵循就近原则,可以较好的解决容错问题。
- 如:设备宽364dp,系统会自动就近配置values-sw360dp下的dimens,显示效果相差不会很大
- 今日头条——修改density值
- 原理:px = dp x (dpi/160) = dp x density
- 既然如此,将density
- 需要UI出设计图时以统一的dp为基准
- mp.weixin.qq.com/s/d9QCoBP6k…
基本概念
- 像素——px
- 密度独立像素——dp或dip
- 像素密度——dpi,单位面积内的像素数。
- 软件系统的概念。
- 在系统出厂时,配置文件中的固定值。
- 通常的取值有:160、240、360、480等。
- 不同于物理概念上的屏幕密度ppi,如ppi为415、430和470时,dpi可能会统一设置为480。
- density——当dpi=160时,1px = 1pd,此时denstiy的值为1,dpi=240时,1.5px = 1dp,density的值为1.5。
- 上述值的关系:
- denstiy = dpi / 160;
- px = dp x density = dp x (dpi / 160)
Android设备的碎片化极为严重,各种尺寸和分辨率的设备无比繁多。使得在Android开发中,UI适配变成了开发过程中极为重要的一步。为此Google提出了密度独立像素dip或dp的概率,旨在更友好的处理Android UI适配问题。
但是效果嘛,只能说差强人意,可以解决大部分的业务场景,但是剩下的个别情况就搞死人了,原因在于Android设备碎片化实在太严重了,存在各种分辨率和dpi的设备。
比如两台设备A和B,分辨率是1920x1080,dpi分别为420和480,在布局中编写一个100dp宽的ImageView,按照上面的公式ImageView的显示宽度分别为:100dp x 420 / 160 = 262.5和100dp x 480 / 160 = 300,ImageView在B设

本文详细介绍了Android UI适配的多种策略,包括使用dp替代px、自动适配布局、宽高限定符以及最小宽度限定符。针对不同分辨率和dpi设备,通过创建不同资源文件夹进行适配,并讨论了第三方适配框架的工作原理和局限性。同时,强调了在Android设备碎片化背景下,如何通过合理选择和组合适配方案来优化用户体验。
最低0.47元/天 解锁文章
448

被折叠的 条评论
为什么被折叠?



