Android 屏幕适配

来源:互联网 发布:windows radius 搭建 编辑:程序博客网 时间:2024/06/05 22:51

让应用自动适配多个分辨率的屏幕,是每个android程序员的基本功,就好像前端工程师熟练编写CSS Hack一样。适配工作中一个重要的工作就是对页面的调整。

对于页面的适配,有很多的方法和技巧。比如布局中尽量使用wrapcontent ,fillparent,尽量避免具体的数字,由系统来计算合适的宽高;或者为每个分辨率写一套布局文件,设置对应分辨率下控件的宽高;

为每一个分辨率写一套布局文件虽然够独立,够简单。但是维护起来成本较高。一个页面的改动,往往涉及多个布局文件的改动,让人很痛苦。

1.layout_weight适配方式
和我现在常用的方式一样。设置layout_width="0dp",则layout_weight越大,该空间所占的空间就越大。但如果layout_width="match_parent"的话,设置起来就比较麻烦了。假如有三个控件,它们的权重分别是1,1,1,则显示时,它们所占空间比例是11;但如果权重设置为1:2:1的话,则第三个控件无法显示,第一个控件和第二个控件显示比例为1:1;如果权重设置为1:2:3,则第三个控件仍是无法显示,前两个控件显示比例为2:1;计算起来挺麻烦的。但如果设置它们的layout_width="0dp"的话,则三个控件的比例依次为11;1:2:1;1:2:3;这样使用起来方便多了。

2.,图片资源方面
需要根据dpi值准备5套图片资源:
drawable:主要放置xml配置文件或者对分辨率要求较低的图片
drawalbe-ldpi:低分辨率的图片,如QVGA (240x320)
drawable-mdpi:中等分辨率的图片,如HVGA (320x480)
drawable-hdpi:高分辨率的图片,如WVGA (480x800),FWVGA (480x854)
drawable-xhdpi:至少960dp x 720dp
Android有个自动匹配机制去选择对应的布局和图片资源。
  系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。 在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。

3.layout方面
在res目录下创建不同的layout文件夹,比如layout-640x360,layout-800x480,所有的layout文件在编译之后都会写入R.Java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。但这样的话也使得程序员工作量增加。使用这种方法的话,配置文件一定要加上这段配置代码,不然有时可能会出问题

根据物理尺寸的大小准备5套布局:
layout(放一些通用布局xml文件,比如界面顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar),

4.巧用dimens适配多个分辨率
我们可以尝试只写一套xml布局,然后为该布局准备多套dimension文件。
说的详细一点就是,xml布局中组件的宽高,不要使用具体的数值来表示,而是配置到dimension文件中。每套dimension文件中数值的大小都是成比例计算出来。
比如在1980*1080分辨率下,定义 px15表示15px
15px</ dimen>
那么在 1080 * 720分辨率下,px15要成比例缩小1.5倍, 定义px15 表示 10px
10px</ dimen>
所以在xml布局文件中,我们可以这样来表示:

<LinearLayout

android:layout_width="@dimen/px150"

android:layout_height="@dimen/px15"

android:orientation="vertical" >

123
…………

在res文件夹下,根据尺寸分别建立多个values文件夹,在里面的dimens里设置屏幕分辨率在该情况下,控件宽高等。然后在layout文件中引用。这样的优点是手机会根据屏幕情况从对应values中获取dimens数据。

这套布局文件中的LinearLayout 在1980 * 1080 分辨率下的宽高为 150 x 15 , 在 1080 * 720分辨率下的宽高就会自动变成 100 * 10
其他分辨率同理

声明:eoe文章著作权属于作者,受法律保护,转载时请务必以超链接形式附带如下信息

原文作者: 沐雨Silence

原文地址: http://my.eoe.cn/824176/archive/22721.html

0 0