本文基于 鸿洋大神 在csdn上发布的 Android 屏幕适配方案这一博文,基于自己的学习理解,说说,记录下(照抄不误 -,-)
首先屏幕适配在实际android项目开发过程中是一个让人蛋疼无比的难题,很多面试也会问到(ps:数月前,我在深圳找工作面的公司,十家有十二家会问到)
恩,先从概念性的东西开始说吧,在布局文件当中,一般我们的做法是dp,但是,正如鸿洋大神所说,dp在物理设备的屏幕尺寸相差太大的情况下并没有什么用,就好比你写的1280x720在砖头似的其他安卓机子上(例如:某族,某视等),这种情况对于我们开发者而言就很尴尬了,我们是希望一个程序无论在哪运行,样式ui都显示一样。
说下我以前的做法,编写多套布局,每个分辨率下面一套layout,比如layout-480x800,layout-1280x720,1080x1080等。
看似很好解决,但是
你确定你写这么多布局你不烦?
你确定设计师给你只标注px你换算成dp不烦?
你确定产品经理不会在原有功能上再要求加点什么控件什么的?
所以在被人撸了几遍后,我果断放弃了上述这种做法(写也麻烦,改动也麻烦)
百分比我认为确实是适配的最优方式,像web页面(咨询过前端人员),web在这么多分辨率的电脑,还要兼容各种屏幕的手机一样完美展示,所以。。。
andorid中的百分比是match_parent和wrap_content 显然的是所有空间都用这两个属性并不能匹配我们产品经理天马行空的产品需求
因此,针对ui常常给我们的图是px标注,百分比适配屏幕最优的做法,使用这种方法比较好。
建立多个values文件,也就是常说的dimens适配
首先我们需要设立基准,最好以ui给出的px标注图为基准,这里我取480x320的分辨率为基准(鸿洋大神原话:将任何分辨率的宽度取320份,取值x1-x320,高度取480份,取值y1-y480)
那么我们在宽度为480的屏幕上,它的x1就是 480/基准值(320) = 1.5px
设置好了以后,在控件中,我们设置宽高的时候 width = "@dimens/x120" height = "@dimens/x120"即可
(这样达到的效果是,无论在什么分辨率的机子上,原控件在屏幕的百分比宽度,高度都是固定,从而实现适配屏幕)
编写values文件也比较麻烦,因此鸿洋大神给出了一个工具,xxx.jar 点击即可自动生成480x320的values文件夹(下面链接)
https://github.com/hongyangAndroid/Android_Blog_Demos/tree/master/blogcodes/src/main/java/com/zhy/blogcodes/genvalues
默认基准为480*320,当然对于特殊需求,通过命令行指定即可:
例如:基准 1280 * 800 ,额外支持尺寸:1152 * 735;4500 * 3200;
按照
java -jar xx.jar width height width,height_width,height
上述格式即可。
到此,我们通过编写一个工具,根据某基准尺寸,生成所有需要适配分辨率的values文件,做到了编写布局文件时,可以参考屏幕的分辨率;在UI给出的设计图,可以快速的按照其标识的px单位进行编写布局。基本解决了适配的问题。