原文:http://www.androidlearner.net/android-multi-screen-about.html


1、基本概念

屏幕大小(screen size)– 屏幕的实际大小,用屏幕对角线长度来衡量(比如3.4寸,3.8寸)。android把屏幕分为以下4种:small,normal,large,extra large。
怎么判断?

屏幕密度(Screen Density) -一块实际的屏幕区域有多少个像素,一般用dpi衡量(每英寸有多少个点)。相比起medium、high屏幕密度的设备,在一块确定大小的屏幕区域l密度为low的屏幕拥有的像素更少。android把屏幕密度分为4种:low,medium,high,extra high。

如何判断是ldpi,mdpi,hdpi?

方向(orientation) -屏幕方向分为landscape(横屏)和portrait(竖屏)。

分辨率(Resolution)-屏幕上的总实际像素数。对屏幕进行适配时,一般不关注它的分辨率,只关注它的屏幕大小和密度。

与密度无关的像素(Density-independent pixel,dp或dip)-为了保证你的UI适合不同的屏幕密度,建议你采用dp来定义程序UI。
它的计算方法为:px = dp * (dpi / 160)

sp(scale-independent pixel)

如何分辨一个屏幕是ldpi、mdpi、hdpi的方法,见下图

计算屏幕密度

2、怎样适配多种屏幕

a.在manifest里定义你的程序支持的屏幕类型,相应代码如下:
<supports-screens android:resizeable=["true"| "false"]
android:smallScreens=["true" | "false"] //是否支持小屏
android:normalScreens=["true" | "false"] //是否支持中屏
android:largeScreens=["true" | "false"] //是否支持大屏
android:xlargeScreens=["true" | "false"] //是否支持超大屏
android:anyDensity=["true" | "false"] //是否支持多种不同密度的屏幕
android:requiresSmallestWidthDp=”integer”
android:compatibleWidthLimitDp=”integer”
android:largestWidthLimitDp=”integer”/>

b.对不同大小的屏幕提供不同的layout。

比如,如果需要对大小为large的屏幕提供支持,需要在res目录下新建一个文件夹layout-large/并提供layout。当然,也可以在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。

c.对不同密度的屏幕提供不同的图片。
应尽量使用点9格式的图片,如需对密度为low的屏幕提供合适的图片,需新建文件夹drawable-ldpi/,并放入合适大小的图片。相应的,medium对应drawable-mdpi /,high对应drawable-hdpi/,extra high对应drawable-xhdpi/。
图片大小的确定:low:medium:high:extra high比例为3:4:6:8。举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×48,那么低密度(low)屏幕的图片大小应为36×36,高(high)的为72×72,extra high为96×96。

不同密度的屏幕对应的图片比例

3、多屏幕适配的4条黄金原则
a.在layout文件中设置控件尺寸时应采用wrap_content,fill_parent和dp。

具体来说,设置view的属性android:layout_width和android:layout_height的值时,wrap_content,fill_parent或dp比pix更好。相应地,为了使文字大小更好的适应屏幕应该使用sp来定义文字大小。

b.在程序的代码中不要出现具体的像素值。

为了使代码简单,android内部使用pix为单位表示控件的尺寸,但这是基于当前屏幕基础上的。为了适应多种屏幕,android建议开发者不要使用具体的像素来表示控件尺寸。

c.不要使用AbsoluteLayout(android1.5已废弃)。相应地,应使用RelativeLayout。

d.对不同的屏幕提供合适大小的图片。见上面第2部分。

4、需要注意的地方
以上设置适用于android3.2以下的版本。(本人目前开发是在android2.2上,这部分以后再补充)

5、怎样测试你的程序是否支持多屏幕适配
一般使用AVD Manager创建多个不同大小的模拟器,如下图

6、参考文档http://developer.android.com/guide/practices/screens_support.html


更多相关文章

  1. Android应用程序四大组件
  2. android wearable 研究
  3. android系统信息(内存、cpu、sd卡、电量、版本)获取
  4. android使用自定义属性
  5. 【Android(安卓)开发教程】屏幕方向的改变
  6. Android有效解决加载大图片时内存溢出的问题
  7. cocos2dx程序 在android上 触碰屏幕就崩溃 crash in cocos on to
  8. Android(安卓)支持多屏幕机制
  9. Android使edittext弹出的软键盘位于输入框下面而不是覆盖输入框

随机推荐

  1. Android应用程序注册广播接收器(registerR
  2. Android(安卓)各大网络请求库的比较及实
  3. 深入理解Android消息处理系统——Looper
  4. Android中程序与Service交互的方式(三)-总
  5. android探索之UID u0_axxx的由来
  6. 在Ubuntu上为Android增加硬件抽象层(HAL)模
  7. Android不兼容和版本混乱现象严重
  8. Android(安卓)Canvas练习(4)自已绘折线图
  9. Android之AIDL进程之间的通信
  10. android的logcat详细用法