关于屏幕适配的理解

| 分类 Android  | 标签 Android 

官方地址:Android Developer屏幕适配教程

一.关于布局适配建议

1.不要使用绝对布局

2.尽量使用match_parent 而不是fill_parent

3.能够使用权重的地方尽量使用权重(android:layout_weight)

4.如果是纯色背景,尽量使用android的shape 自定义

5.如果需要在特定分辨率下适配,可以在res目录上新建layout-HxW.xml的文件夹。比如要适配1080*1800的屏幕(魅族MX3采用此分辨率)则新建layout-1800x1080.xml的文件夹,然后在下面定义布局。Android系统会优先查找分辨率相同的布局,如果不存在则换使用默认的layout下的布局。

二.术语和概念

四种屏幕尺寸分类:: small, normal, large, and xlarge

四种密度分类: ldpi (low), mdpi (medium), hdpi (high), and xhdpi (extra high)

需要注意的是: xhdpi是从 Android 2.2 (API Level 8)才开始增加的分类.

xlarge是从Android 2.3 (API Level 9)才开始增加的分类.

DPI是“dot per inch”的缩写,每英寸像素数。

一般情况下的普通屏幕:ldpi是120,mdpi是160,hdpi是240,xhdpi是320。

三.如何做到自适应屏幕大小

1)界面布局方面
需要根据物理尺寸的大小准备5套布局,layout(放一些通用布局xml文件,比如界面中顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的title bar),layout-small(屏幕尺寸小于3英寸左右的布局),layout-normal(屏幕尺寸小于4.5英寸左右),layout-large(4英寸-7英寸之间),layout-xlarge(7-10英寸之间)

2)图片资源方面
需要根据dpi值准备5套图片资源,drawable,drawalbe-ldpi,drawable-mdpi,drawable-hdpi,drawable-xhdpi

Android有个自动匹配机制去选择对应的布局和图片资源

四.关于图片制作

1)关于设计:
设计图先定下一个要设计的尺寸,而且尽量采用在目前最流行的屏幕尺寸(比如目前占屏幕比重比较多的是480系列,也即是480800或者400854,下面的图标制作也在次基础上进行比例的换算)上设计。 先了解一下屏幕的级别:

屏幕级别 屏幕密度 比率(相对) 物理大小(英寸) 像素大小 分辨率
ldpi 120 0.75 1 120 240*320
mdpi 160 1 1 160 320*480
hdpi 240 1.5 1 240 480*800
xdpi 320 2 1 320 720*1280
xxdpi 480 3 1 480 1080*1920

2)关于图标的适配:
在切好图的基础上,根据屏幕密度、像素和实际大小的比例关系。假如设计师在480 * 800的分辨率下做好了设计图,并且切好图,如果你需要适配720 * 1280屏幕,该怎么做?根据比例,他们的关系是2:3,于是你需要按照1.5倍比例制作图标,比如你在480 * 800的设计稿上切下来一个20 * 20像素的图,那么你就需要制作一个等比放大成30 * 30像素的图标,这样同一个图标在480 * 800的屏幕和720 * 1280的屏幕上显示的实际大小才一样。同理,如果你需要适配xxhdpi则需要在20 * 20的基础上制作一个等比放大成40 * 40像素的图标。

五.关于屏幕适配小技巧sw<n>dp

第一种后缀:sw<n>dp,如layout-sw600dp, values-sw600dp 这里的sw代表smallwidth的意思,当你所有屏幕的最小宽度都大于600dp时,屏幕就会自动到带sw600dp后缀的资源文件里去寻找相关资源文件,这里的最小宽度是指屏幕宽高的较小值,每个屏幕都是固定的,不会随着屏幕横向纵向改变而改变。
第二种后缀w<N>dp 如layout-w600dp, values-w600dp 带这样后缀的资源文件的资源文件制定了屏幕宽度的大于Ndp的情况下使用该资源文件,但它和sw<N>dp不同的是,当屏幕横向纵向切换时,屏幕的宽度是变化的,以变化后的宽度来与N相比,看是否使用此资源文件下的资源。
第三种后缀h<N>dp 如layout-h600dp, values-h600dp 这个后缀的使用方式和wdp一样,随着屏幕横纵向的变化,屏幕高度也会变化,根据变化后的高度值来判断是否使用h<N>dp ,但这种方式很少使用,因为屏幕在纵向上通常能够滚动导致长度变化,不像宽度那样基本固定,因为这个方法灵活性不是很好,google官方文档建议尽量少使用这种方式。


上一篇     下一篇