让应用自动适配多个分辨率的屏幕,是每个android程序员的基本功,就好像前端工程师熟练编写CSS Hack一样。适配工作中一个重要的工作就是对页面的调整。
对于页面的适配,有很多的方法和技巧。比如布局中尽量使用wrapcontent ,fillparent,尽量避免具体的数字,由系统来计算合适的宽高;或者为每个分辨率写一套布局文件,设置对应分辨率下控件的宽高;
为每一个分辨率写一套布局文件虽然够独立,够简单。但是维护起来成本较高。一个页面的改动,往往涉及多个布局文件的改动,让人很痛苦。
我们可以尝试只写一套xml布局,然后为该布局准备多套dimension文件。
说的详细一点就是,xml布局中组件的宽高,不要使用具体的数值来表示,而是配置到dimension文件中。每套dimension文件中数值的大小都是成比例计算出来。
比如在1980*1080分辨率下,定义 px15表示15px
<dimen name= "px15" >15px</ dimen>那么在 1080 * 720分辨率下,px15要成比例缩小1.5倍, 定义px15 表示 10px
<dimen name= "px15" >10px</ dimen>所以在xml布局文件中,我们可以这样来表示:
<LinearLayout android:layout_width="@dimen/px150" android:layout_height="@dimen/px15" android:orientation="vertical" > …… …… </LinearLayout>
这套布局文件中的LinearLayout 在1980 * 1080 分辨率下的宽高为 150 x 15 , 在 1080 * 720分辨率下的宽高就会自动变成 100 * 10
其他分辨率同理
1.有的同学会疑问,这样不就变成需要维护多套dimenson文件了?换汤不换药呀?
其实不然,对于dimension文件我们可以使用代码来控制生成,数值范围可以根据自己的情况来。其他分辨率下只需要按照相应比例,使用代码算一下即可。
编写一个这样的生成代码并不难,下篇文章我们再给出。
生成完毕后,Values 目录结构如下:
2. 按比例计算布局一定可靠吗,会不会出现混乱的现象
有可能会,这个时候就需要协调布局使用的宽高,选择合适的宽高让页面在各个分辨率下,看起来不算离谱就行,不一定严格按照设计来。大部分页面是兼容的。
下一篇文章,我们给出自动生成这些dimension文件的代码。
原文链接:http://www.67tgb.com/?p=573
转载注明出处:望月听涛