屏幕适配的核心:其一,就是适配的效率,即把设计图转化为App界面的过程是否高效,其二如何保证实现UI界面在不同尺寸和分辨率的手机中UI的一致性。
背景知识:
dp的优点,相同dp的控件,能够保证不同屏幕上的实际物理大小相同
缺点:
1、由于屏幕尺寸不一样,对于同样dp的控件,有的屏幕放不下,有的屏幕有留白
2、为了便于统一适配,对于某个区间内的dpi,系统会统一视为某个dpi来使用,比如几部相同分辨率不同尺寸的手机的ppi(屏幕中ppi值等于dpi)可能分别是是430,440,450,那么在Android系统中,可能dpi会全部指定为480,这样的话,dpi/160就会是一个相对固定的数值,但这样就会将实际显示尺寸和清晰度有细微差别。
根据上述缺陷,需要更优秀的屏幕适配方案
1、使用宽高限定符,即穷举市场上的手机宽高分辨率,如values-1920x1080,优点是精确,缺点也是如此,必须要精确匹配,否则只能用默认的宽高dimens;
2、使用最小宽度(或最小高度)限定符,如values-sw360dp,和前一方案原理一致,优点是容错率较高,如果不能精确匹配,系统能往下寻找最接近的资源文件,
两个方法的弊端都是会增大apk体积,dimens文件的体积增大量一般不超过1m,如果算上不同分辨率的图片资源就会增大较多
3、今日头条屏幕适配方案,如果设计稿是360dp宽度,动态设置手机的destiny使其在不同设备上始终保持宽度px/destiny = 360dp,这样就能保证不同屏幕上UI的一致性。
缺陷就是对老项目维护不友好,因为这样会把整个布局尺寸都改动,老项目可能是写死dp或按照最小宽度区分values适配的,需要做较多改动。
经验小提示
- 限定宽度,高度用match-parent,或者采用滑动方式
- 百分比布局、weight、ConstraintLayout都是可选工具
AndroidAutoSize 使用经验
- jessyan是否会对三方库页面产生影响 会
- 三方库的引用方式中本地引用是否和远程引用等效 是
- 验证引用jessyan时候项目会不会根据屏幕尺寸选择不同的dimens 会
核心功能,只要按照设计图写(设计图以dp为单位),然后适配,设置好高度或宽度的基准,就能适配大部分的屏幕(从基准轴根据不同屏幕比例缩放,最大程度接近设计稿效果),基本不需要多个dimens。
公司音乐模块区分dimens的原因是hls和cat的设计稿都不一样,两个软件的基准值也不一样,所以要区分。