android多屏幕适配资源生成,android – 多屏幕适配相关

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)

e672824d7d0a82eb963baf8d3572f2c7.png

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

78ed0b940f15bf27a95bac3271f721bc.png

计算屏幕密度

2、怎样适配多种屏幕

a.在manifest里定义你的程序支持的屏幕类型,相应代码如下:

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两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。

bf19f8611dee7db9d831466123d7e987.png

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。

ca0cf555d3e682298801b445fbebc8e7.png

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

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创建多个不同大小的模拟器,如下图

2b1ada5d4d8629a0671a97cf98f8c6a5.png

问题:

测试时,发现应用在不同的显示器上显示效果不同(部分文本不能显示完全),自然想到屏幕适配的问题。

按照思路整理如下:

(一) 几个概念

1, Screen size屏幕的尺寸,即对角线长度(单位inch-英寸)

2, Screen density屏幕密度,即单位长度像素点数(pots/inches)

3, Resolution 分辨率,即屏幕的总像素点数(width * height)

4, Density-independent pixel (dp)独立像素密度。标准是160dip.即1dp对应1个pixel,计算公式如:px = dp * (dpi / 160),屏幕密度越大,1dp对应 的像素点越多。

(二) 屏幕的分类(size & density)

1, 以总像素数分,文本的size等都要改,如下图所示

353e7ab3b7da369a43cd9cfc523d8258.png

每一个分类都有其最小分辨率,如下,可根据分辨率划分种类:

6a47761e2f56552ba95d61b3f0a6ef12.png

2, 以屏幕密度分,提供不同的图片如下图所示

d6ada1e7a13d8f654709d1f673d710fe.png

Note1:匹配以上面两种为参考。

Note2:还有专为水平(landscape)和竖直(portrait)两种,使用的少,在此不赘述。

(三) Android寻找最佳资源原理

1, 排除与设备设置不符合的资源

2, 根据限定词(qualifier)的优先级,按照顺序查找

3, 在限定词下,是否存在资源路径

4, 排除不包含在限定词中的资源路径

5,  继续执行不同的限定词查找,直到找到相应的资源

如下图所示:

01cb4ce773eee068c03f0512985c6510.png

(四) 项目步骤:

1, manufest中配置

android:anyDensity="true"

android:largeScreens="true"

android:normalScreens="true"

android:smallScreens="true"

android:xlargeScreens="true" />

2, 新建对应的资源文件夹

A, Layout

例如,我现在有三个显示器分辨率:

分别为1280*720,1024*768,1200*690

根据以上最低分辨率的要求,分为xlarge和large两类,新建两个文件夹,如下:

如下图所示:

5b4d41a36c5934390ecddf781def4ce2.png

B, Drawable

如下图所示:

ddf0053ed1c6a266cf1cd1695ba5b567.png

在drawable中,以mdpi为标准(即160dpi)。比例保持为3:4:5:6,如下图所示:

68d355ebcdce7a29b8625a86154c7270.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值