Android屏幕适配技巧

Android屏幕适配技巧_第1张图片

随着Android智能的不断飞跃,Android设备的种类也在不断增长中,再加上各大厂商订制的不同款型,造成了屏幕尺寸也是多种多样,这样就对程序员造成了一个非常直观的问题,屏幕适配。所谓屏幕适配就是一款APP在不同尺寸的屏幕上都能正常显示,再直白点说,就是显示出来是一个效果。

目前主流的分辨率提取出前六种:

1280×720、1920×1080、800×480、854×480、960×540、1184×720

如果你作为一个开发人员,那么起码的几个放置图片的文件夹mdpi、hdpi、xdpi、xxdpi、xxxdpi就不怎么陌生了,那么什么是mdpi、hdpi、xdpi、xxdpi、xxxdpi?

名称          像素密度范围         图片大小

mdpi         120dp~160dp             48×48px

hdpi          160dp~240dp             72×72px

xhdpi        240dp~320dp             96×96px

xxhdpi      320dp~480dp             144×144px

xxxhdpi    480dp~640dp             192×192px

在Google官方开发文档中,说明了 mdpi:hdpi:xhdpi:xxhdpi:xxxhdpi=2:3:4:6:8 的尺寸比例进行缩放。例如,一个图标的大小为48×48dp,表示在mdpi上,实际大小为48×48px,在hdpi像素密度上,实际尺寸为mdpi上的1.5倍,即72×72px,以此类推。

简单理解了之后咱们来实际学习一下如何进行屏幕适配

1. 使用wrap_content、math_parent、weight

wrap_content:根据控件的内容设置控件的尺寸

math_parent:根据父控件的尺寸大小设置控件的尺寸

weight:权重,在线性布局中可以使用weight属性设置控件所占的比例(一般情况,我们都是设置要进行比例分配的方向的宽度或者高度为0dp,然后再用权重进行分配)

2. 使用相对布局,禁用绝对布局

简单的布局一般都使用线性布局,而略微复杂点的布局,我们使用相对布局,大多数时候,我们都是使用这两种布局的嵌套。

我们使用相对布局的原因是,相对布局能在各种尺寸的屏幕上保持控件间的相对位置。

3. 使用限定符

使用尺寸限定符

当我们要在大屏幕上显示不同的布局,就要使用large限定符。例如,在宽的屏幕左边显示列表右边显示列表项的详细信息,在一般宽度的屏幕只显示列表,不显示列表项的详细信息,我们就可以使用large限定符。

res/layout/main.xml 单面板:

res/layout-large/main.xml 双面板:

如果这个程序运行在屏幕尺寸大于7inch的设备上,系统就会加载res/layout-large/main.xml 而不是res/layout/main.xml,在小于7inch的设备上就会加载res/layout/main.xml。

需要注意的是,这种通过large限定符分辨屏幕尺寸的方法,适用于android3.2之前。在android3.2之后,为了更精确地分辨屏幕尺寸大小,Google推出了最小宽度限定符。

使用最小宽度限定符

最小宽度限定符的使用和large基本一致,只是使用了具体的宽度限定。

res/layout/main.xml,单面板(默认)布局:

res/layout-sw600dp/main.xml,双面板布局: Small Width 最小宽度

这种方式是不区分屏幕方向的。这种最小宽度限定符适用于android3.2之后,所以如果要适配android全部的版本,就要使用large限定符和sw600dp文件同时存在于项目res目录下。

这就要求我们维护两个相同功能的文件。为了避免繁琐操作,我们就要使用布局别名。

使用布局别名

res/layout/main.xml: 单面板布局

res/layout-large/main.xml: 多面板布局

res/layout-sw600dp/main.xml: 多面板布局

由于后两个文具文件一样,我们可以用以下两个文件代替上面三个布局文件:

res/layout/main.xml 单面板布局

res/layout/main_twopanes.xml 双面板布局

然后在res下建立

res/values/layout.xml、

res/values-large/layout.xml、

res/values-sw600dp/layout.xml三个文件。

默认布局

res/values/layout.xml:

@layout/main

Android3.2之前的平板布局

res/values-large/layout.xml:

@layout/main_twopanes

Android3.2之后的平板布局

res/values-sw600dp/layout.xml:

@layout/main_twopanes

这样就有了main为别名的布局。

在activity中setContentView(R.layout.main);

这样,程序在运行时,就会检测手机的屏幕大小,如果是平板设备就会加载res/layout/main_twopanes.xml,如果是手机设备,就会加载res/layout/main.xml 。我们就解决了只使用一个布局文件来适配android3.2前后的所有平板设备。

4. 使用自动拉伸位图

自动拉伸位图,即android下特有的.9.png图片格式。

当我们需要使图片在拉伸后还能保持一定的显示效果,比如,不能使图片中的重要像素拉伸,不能使内容区域受到拉伸的影响,我们就可以使用.9.png图来实现。

你可能感兴趣的:(Android屏幕适配技巧)