Android适配方案小结(三)

在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)

时间: 2024-12-28 19:22:13

Android适配方案小结(三)的相关文章

Android适配方案小结(二)

该节主要记录从代码中获取与屏幕适配相关的各个参数: Java代码如下 public class ScreenUtil { /** * Note: * 只有activity可以使用getWindowManager,否则应该使用 * Context.getResources().getDisplayMetrics()来获取 */ /** * 获取DisplayMetric相关参数 * @param context * @return */ public static String getMetric

Android适配方案小结(一)

相关计量单位介绍: px:是屏幕的像素点,不同设备显示的效果一样. in:英寸(1英寸等于2.54cm) mm:毫米 pt:磅, 1/72英寸 dp:device independent pixels(设备独立像素),不同设备有不同的显示效果,这个和设备 硬件有关.基于density的抽象单位,如果一个160dpi的屏幕,1dp=1px.(160dpi表示1英寸 有160个像素点) dip:等同于dp,因此我们在xml中使用dp和dip效果一样. sp:scaled pixels, 同dp相似,

Android 目前最稳定和高效的UI适配方案

Android系统发布十多年以来,关于Android的UI的适配一直是开发环节中最重要的问题,但是我看到还是有很多小伙伴对Android适配方案不了解.刚好,近期准备对糗事百科Android客户端设计一套UI尺寸适配方案,可以和小伙伴们详细的聊一聊这个问题.Android适配最核心的问题有两个,其一,就是适配的效率,即把设计图转化为App界面的过程是否高效,其二如何保证实现UI界面在不同尺寸和分辨率的手机中UI的一致性.这两个问题都很重要,一个是保证我们开发的高效,一个是保证我们适配的成效:今天

android屏幕适配方案

曾经看了android的屏幕适配方案,有非常多种.当中自己用到的一种是:先找一款主流的分辨率的android机,如:1080*1920的分辨率做基准,然后在这个基准上.调整好一切布局.图片.适配其它手机分辨率的手机.用百分比来调节.比如:在480*800的主流手机上,写了一个height=520,那么在480*800的手机上,这个控件的高度则为 480height = 520 * 屏幕高度/1920. 这种方案做屏幕适配. 项目遇到一个问题. 在剩余空间里.在1080*1920的手机上适配非常好

android多分辨率多屏幕密度下UI适配方案

相关概念 分辨率:整个屏幕的像素数目,为了表示方便一般用屏幕的像素宽度(水平像素数目)乘以像素高度表示,形如1280x720,反之分辨率为1280x720的屏幕,像素宽度不一定为1280 屏幕密度:表示单位面积内的像素个数,通常用dpi为单位,即每英寸多少个像素点 px:长度单位,以具体像素为单位 dp:长度单位,与具体屏幕密度无关,显示的时候根据具体平台屏幕密度的不同最终转换为相应的像素长度,具体转换规则是: 1dp = (目标屏幕密度/标准密度)*px,标准密度为160dpi,例如,1dp长

Cocos2dx-Android屏幕适配方案

本文转载于http://www.cnblogs.com/zisou/p/cocos2d-xJIqiao3.html 先感叹一下吧~~android的各种分辨率各种适配虐我千百遍,每次新项目我依旧待它如初恋···· 每家公司都有自己项目工程适配的方案,这种东西就是没有最好,只有最适合!!! 这次新项目专项针对android,目的性强,适配方案我觉得2套图去兼容android各种分辨率: 我们先了解一下android手机上的屏幕密度: Android主要有以下几种屏: QVGA和WQVGA屏dens

Android屏幕适配框架-(今日头条终极适配方案)

在Android开发中,屏幕适配是一个非常头痛的问题,因而为了去进行屏幕适配,作为程序员,是呕心沥血,历经磨难,哈哈 我们之前做屏幕适配一般都会用到一下两种方式: 第一种就是宽高限定符适配,什么是宽高限定符适配呢 ├── src/main│   ├── res│   ├── ├──values│   ├── ├──values-800x480│   ├── ├──values-860x540│   ├── ├──values-1024x600│   ├── ├──values-1024x768│

Android开发屏幕适配方案

Android屏幕适配方案总结 日常开发中,难免遇到屏幕适配的方案,网上也有很多方案,在这里本人只是做一个总结,以免日后使用 单位的概念 pt(point):磅,一个标准的固定长度单位,大小为1/72英寸,主要用于印刷与平面设计.1英寸=2.54厘米=72磅 1pt=0.03527cm px(pixel):像素,组成屏幕图像的最小点,一个相对大小单位.同尺寸屏幕中像素越小越多,代表屏幕分辨率越高,反之越高. 1pt=(ppi/72)*px 屏幕尺寸(screen size):屏幕物理尺寸,指屏幕

开源,原创,实用Android 屏幕适配方案分享

说来惭愧,这段时间忙项目,有时间也拿来调侃人生,好久没有写过技术文章了) 真正可用,并且简单易行,可以在多个屏幕大小和屏幕密度上有良好表现的Android 屏幕适配方案.   已经用在一款成熟互联网 应用中,效果还不错 http://www.meilijie.com/ask/view/377116/http://www.meilijie.com/ask/view/377668/http://www.meilijie.com/ask/view/377838/http://www.meilijie.