在Android适配方案小结(一)、(二)中,我们了解了一些基本概念。
那么在具体开发中,我们应该注意什么呢。
首先,我们必须要知道,其实适配的关键在于两点:
(1)不同分辨率设备的适配,这点在单位的使用上用dp、sp以及图片资源存放于不同的drawable文件夹就可以解决问题;
(2)不同尺寸的适配,这点主要靠将相关值以及布局文件放置于不同的文件夹中来解决。
2.1 values文件夹
可以在工程下创建不同的values文件夹:values-sw480dp, values-sw600dp,
values-sw720dp-land等。比如一个控件的宽度,在10寸pad上是10dp,在8寸pad
上是5dp。这时,你可以定义一个变量,button_width,然后在values-sw600dp
下写<dimen name=”button_width“>5dp</dimen>,在values-sw720-land下写
<dimen name=”button_width“>10dp</dimen>。这样就达到了在不同尺寸pad上,
相应控件大小不一样的效果。
2.1 layout文件夹
如果在不同尺寸设备上展示的布局有明显差别,仅仅用values不同已经难以控制,
那么就可以考虑写不同的布局文件置于不同的layout文件夹下,android会根据设备
尺寸去加载相应文件夹下的布局文件。如:layout-sw480dp,layout-sw600dp,
layout-sw700dp等。
值得注意的是,如果不是很有必要,尽量采用2.1方案,方便维护。如果尺寸和分辨率都不同,
那么就要结合(1)、(2)考虑了。
(补充:其实values文件夹和layout文件夹不仅仅是根据尺寸判断,也和分辨率有关,不过在通常情况下,
综合计算考虑,仅根据尺寸判断就可以了:
320dp: a typical phone screen (240x320 ldpi, 320x480 mdpi, 480x800 hdpi, etc). 480dp: a tweener tablet like the Streak (480x800 mdpi). 600dp: a 7” tablet (600x1024 mdpi). 720dp: a 10” tablet (720x1280 mdpi, 800x1280 mdpi, etc).
600dp的含义是:代表这个设备的最短的那一边。
获取设备的最短边的代码是:Configuration
config = getResources().getConfiguration();
int smallestScreenWidth = config.smallestScreenWidthDp;
这个时候拿smallestScreenWidth 与600想比较就可以知道该设备能否读取里面的资源了。
)
除此之外,为了方便适配,在编码时我们还应该注意什么呢,主要有以下几点:
(1)多使用权重(android:layout_weight)
尤其是在tab切换布局,listview title及Item布局等情况下;
(2)设置宽度和高度时,尽量使用match_parent和wrap_content,避免把控件宽高设死;
(3)父容器布局选用
多使用RelativeLayout,FrameLayout,GridLayout等,减少布局层次。当然,在使用
权重时,得采用LinearLayout;
(4) 在xml里,设置高度、宽度采用dp(dip),设置字体采用sp。
(应该注意,在代码里面,我们写的setHeight(...)单位是px)