序言
大渣好,马上要过春节了,举国同庆的日子,在这里先祝大家:新年快乐,合家欢里,工作顺利,每天都旺、旺、旺!接下来,进入正题,今天我们的主题是适配,我们都知道 Android 屏幕碎片化特别严重,所以我们不止要开发一款好的应用,而且要在各种手机上都保持一样的效果,至少主流机型没问题,这是我们最头疼的问题,总之适配的工作是不可避免的,适配的方式包括很多内容,关于这一块的内容,我们简单聊一下!
适配常识
对于度量单位,有很多形式,android 中提到的类型有:dp 、ps、px、inch、pt、mm,也就是你可以使用这几种形式的单位,在不同的分辨率下,显示的效果是截然不同的,所以在 Android 中提倡以 dp (与像素无关)来作为统一单位,在实际使用中1dp大约等于1/160 in,而文字统一使用 sp 作为单位,以达到显示的一致性。关于单位的换算,可以看 Android 源码或者百科一下
所以,适配是一个很复杂的工作,简单罗列一下适配的几种形式:
- 基础适配
- 使用 dp 而非其他单位
- 使用 wrap_content, match_parent 与 weight 权重,尽量不写固定尺寸
- 使用相对布局
- 配合使用 .9 图片
- 使用矢量图
- 资源适配
- 多套 drawable 资源
- 多套 layout 资源
- 多套 values 资源
- 百分比布局
关于软件
以上就是关于适配的一些方式,这里就不再一一详细说明了,接下来重点说一说 values 中 dimens.xml 适配的问题,这就是我来做这个软件的关键所在。
我们在适配 values 时会创建如:values-720×1280、values-sw720dp、values-w720dp 等针对不同分辨率下的尺寸适配方案,我们都知道 dimens.xml 中保存了各种尺寸值,所以,当存在多套 values 适配时,需要将默认的 dimens.xml 尺寸值转换为对应分辨率下的尺寸,无论是 dp 、ps 、px 等,都需要根据不同的比例转换,当 dimens.xml 文件中尺寸越来越多,单位不同时,如果一个个的计算很麻烦,这是发生在我身边的事,维护的以前的项目,现在要重新作适配,很多分辨率下的适配,就 dimens 这一块的适配就好几天(可能有同学会说,写程序的时候就写好,但是试问谁是这么做的,一开始没有人设定适配的方案,而且在第一套方案没有完成之前,谈适配不是太早了吗,每一次的调整都要改好几套,累死不讨好),呵呵…… 而且最后还找了一些软件,但是很不好用,还要把所有的单位统一之后才可以使用,很鸡肋,所以我决定自己写一个统一的方案,可以一键转换的那种,最终,今天的主角,就是来做这件事的,我暂且叫作:Dimens Adapter。
WEB
本着方便的原因,我将这个功能提供了两种形式的使用方式,PC端(Windows) 和 Web端,同样的使用效果。
**Web版的入口:http://devtools.net.cn/dimens/ **
**Web版的入口:http://devtools.net.cn/dimens/ **
**Web版的入口:http://devtools.net.cn/dimens/ **
这款软件,我使用了强大的 Python 语言,至于为什么,自行了解,就边学习边使用,之前已经看过很多遍了,其实还是很好上手的,哈…… ,Web 版本使用的是:阿里ECS云服务器 + Django + uwsgi,在部署的过程中,遇到了很棘手的问题,问题并不多,但是搜不到相关的答案,不过最终还是很幸运的说,换个思路,部署成功了,效果很不错的说
- 效果如下:
- 使用
- 填写目标分辨率 density
- 填写目标分辨率 sacle density
- 填写目标分辨率 xdpi
- 将默认的 dimens.xml 文件的内容复制到这里
- 这里是转换后的文件内容,没有提供文件下载,自行复制
- 当1、2、3、4 填写好之后,点击转换,最终展示在 5 里面
PC
核心代码变化不大,面对的输出环境不一样,区别于读写操作,本身的 python 文件可以通过追加参数本地运行,也可以作为正常模块使用,最后在UI 方面,使用 Qt,最后打包,一款图形化的软件就诞生了,只需要一个 exe 文件,不需要安装,绿色环保,所见即所得。但是话说遇到了很多的坑,主要在于打包工具的兼容性问题,开发环境安装卸载了很多遍,各种姿势都试过了,但是软件开发或者对程序员来说,就是这样一个不断调试完善的过程,不断填坑的过程。虽然UI丑了点,但是核心功能具备,这就说明了软件迭代的重要性了,哈……
下载地址:密码un9w
下载地址:密码un9w
下载地址:密码un9w
- 效果如下
其实软件的使用很简单,都是一键式的傻瓜操作:
- 功能讲解:
- 填写目标分辨率 density
- 填写目标分辨率 sacle density
- 填写目标分辨率 xdpi
- 填写默认的 dimens.xml 文件地址
- 日志输出区域,成功后会显示目标文件的地址
- 如果不手动填写 dimens.xml 文件地址,可以浏览选择文件
- 都填写完毕之后,点击该按钮执行转换
菜单讲解:
- 主要的说明就是 选项(options) 功能,默认提供了几种比例方案,只要选择对应的方案,就可以填写到指定内容,并选择默认的 dimens.xml 转换即可
- 可以转换语言(英语、中文)
- 简单的使用说明、作者信息
使用参考
关于密度、分辨率的比例参考如下:
屏幕密度 | 范围(dpi) | 标准分辨率 | dp与px | 图标尺寸 |
---|---|---|---|---|
ldpi(QVGA) | ~ 120 | 240 * 320 | 1dp=0.75px | 36 * 36 |
mdpi(HVGA) | 120 ~ 160 | 320 * 480 | 1dp=1px | 48 * 48 |
hdpi(WVGA) | 160 ~ 240 | 480 * 800 | 1dp=1.5px | 72 * 72 |
xhdpi(720P) | 240 ~ 320 | 720 * 1280 | 1dp=2px | 96 * 96 |
xxhdpi(1080p) | 320 ~ 480 | 1080 * 1920 | 1dp=3px | 144 * 144 |
xxxhdpi(2K) | 480 ~ 640 | 1440 × 2560 | 1dp=4px | 192 * 192 |
提示:图标大小 = px数 * 4 * 12
总结
不管是Web还是pc,从专业的角度讲,有点简陋和丑陋,纯属个人爱好和需要,没什么比较的,愿意使用就放心使用,不想用绕道即可,不接受喷子,没有产品经理、项目经理,还不能任性一回?如果有遇到任何问题,可以随时联系:xiaofeng355@sina.com