Android适配方案

关键点:设计图与App界面的转换,分辨率是核心问题

dp适配:

官方提供工具,后续的解决方案也是以此为基础;
公式:px = dp(dpi/160)
dpi是像素密度,软件概念上的值,但可能不同尺寸的相同分辨率手机会有不一样的值,这也导致了这套方案会有少部分手机适配不了

宽高限定符适配

穷举市面所有手机宽高像素值


image.png

设定基准分辨率(一般是设计稿尺寸),并在其他尺寸编写对应dimens文件
致命问题:必须精准命中,容错差

sw限定符适配

根据横向dp值寻找对应资源文件


image.png

该方案关键在于系统在查询不到对应dp文件夹时,会自动向下寻找最近的dp文件夹
相比起下面的方案,这套方案更加可控,扩展也方便,比较适合提供独立服务的项目使用

配置限定符

常用限定符

  • 语言和区域:en, fr, en-rUS 等等
  • smallestWidth:sw<N>dp 如:sw320dp, sw600dp, sw720dp 等等,屏幕可用高度和宽度的最小尺寸,屏幕的“最小可能尺寸”。
  • 屏幕方向:port 设备处于纵向(垂直),land 设备处于横向(水平)
  • 屏幕像素密度:ldpi, mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi, nodpi, tvdpi
    注:这些限定符必须遵循上面列出的顺序,所以上面的列表是有顺序的。例如:错误:drawable-hdpi-port/,正确:drawable-port-hdpi/

mipmap和drawable

mipmap 文件夹下,仅仅建议放启动图标 (app launcher icons),也就是应用安装后,会显示在桌面的那个图标,而其他的图片资源等,还是按照以前方式,放在 drawable 文件夹下。
在应用安装时 Android 资源优化会把 drawable 文件夹下不需要的分辨率资源删除掉;Android 会保证 mipmap 下的资源不会因为资源优化而被删除,确保大尺寸的 Launcher Icon 可以找到更合适分辨率的 Icon。

今日头条适配方案

通过修改density值,强行把所有不同尺寸分辨率的手机的宽度dp值改成一个统一的值,这样就解决了所有的适配问题,缺点在于如果是提供独立服务,会直接影响到使用服务的应用,老业务的修改成本也会很大
比如,设计稿宽度是360px,那么开发这边就会把目标dp值设为360dp,在不同的设备中,动态修改density值,从而保证(手机像素宽度)px/density这个值始终是360dp,这样的话,就能保证UI在不同的设备上表现一致了。
这个方案侵入性很低,而且也没有涉及私有API,应该也是极不错的方案,我暂时也想不到强行修改density是否会有其他影响,既然有今日头条的大厂在用,稳定性应当是有保证的。

参考文章1
参考文章2

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容