android屏幕适配.docx
- 文档编号:3808045
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:20
- 大小:283.86KB
android屏幕适配.docx
《android屏幕适配.docx》由会员分享,可在线阅读,更多相关《android屏幕适配.docx(20页珍藏版)》请在冰豆网上搜索。
android屏幕适配
Android屏幕适配
1、屏幕相关概念
1.1解析度
2、
是指屏幕上有横竖各有多少个像素
1.2屏幕尺寸
指的是手機實際的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸
android将屏幕大小分为四个级别(small,normal,large,andextralarge)。
1.3屏幕密度
每英寸像素数
手机可以有相同的分辨率,但屏幕尺寸可以不相同,
Diagonalpixel表示对角线的像素值(=),DPI=933/3.7=252
android将实际的屏幕密度分为四个通用尺寸(low,medium,high,andextrahigh)
一般情况下的普通屏幕:
ldpi是120dpi,
mdpi是160dpi,
hdpi是240dpi,
xhdpi是320dpi
对于屏幕来说,dpi越大,屏幕的精细度越高,屏幕看起来就越清楚
1.4密度无关的像素(Density-independentpixel——dip) 】
dip是一种虚拟的像素单位
dip和具体像素值的对应公式是dip/pixel=dpi值/160,也就是px=dp*(dpi/160)
当你定义应用的布局的UI时应该使用dp单位,确保UI在不同的屏幕上正确显示。
手机屏幕分类和像素密度的对应关系如表1所示
手机尺寸分布情况(
目前主要是以分辨率为800*480和854*480的手机用户居多
从以上的屏幕尺寸分布情况上看,其实手机只要考虑3-4.5寸之间密度为1和1.5的手机
2、android多屏幕支持机制
Android的支持多屏幕机制即用为当前设备屏幕提供一种合适的方式来共同管理并解析应用资源。
Android平台中支持一系列你所提供的指定大小(size-specific),指定密度(density-specific)的合适资源。
指定大小(size-specific)的合适资源是指small,normal,large,andxlarge。
指定密度(density-specific)的合适资源,是指ldpi(low),mdpi(medium),hdpi(high),andxhdpi(extrahigh).
Android有个自动匹配机制去选择对应的布局和图片资源
1)界面布局方面
根据物理尺寸的大小准备5套布局:
layout(放一些通用布局xml文件,比如界面顶部和底部的布局,不会随着屏幕大小变化,类似windos窗口的titlebar),
layout-small(屏幕尺寸小于3英寸左右的布局),
layout-normal(屏幕尺寸小于4.5英寸左右),
layout-large(4英寸-7英寸之间),
layout-xlarge(7-10英寸之间)
2)图片资源方面
需要根据dpi值准备5套图片资源:
drawable:
主要放置xml配置文件或者对分辨率要求较低的图片
drawalbe-ldpi:
低分辨率的图片,如QVGA(240x320)
drawable-mdpi:
中等分辨率的图片,如HVGA(320x480)
drawable-hdpi:
高分辨率的图片,如WVGA(480x800),FWVGA(480x854)
drawable-xhdpi:
至少960dpx720dp
Android有个自动匹配机制去选择对应的布局和图片资源。
系统会根据机器的分辨率来分别到这几个文件夹里面去找对应的图片。
在开发程序时为了兼容不同平台不同屏幕,建议各自文件夹根据需求均存放不同版本图片。
3、AndroidManifest.xml配置
android从1.6和更高,Google为了方便开发者对于各种分辨率机型的移植而增加了自动适配的功能
android: largeScreens="true" android: normalScreens="true" android: smallScreens="true" android: anyDensity="true"/> 3.1是否支持多种不同密度的屏幕 android: anyDensity=["true"|"false"] 如果android: anyDensity="true" 指应用程序支持不同密度,会根据屏幕的分辨率自动去匹配。 如果android: anyDensity="false" 应用程序支持不同密度,系统自动缩放图片尺寸和这个图片的坐标。 具体解释一下系统是如何自动缩放资源的。 例如我们在hdpi,mdpi,ldpi文件夹下拥有同一种资源,那么应用也不会自动地去相应文件夹下寻找资源,这种情况都是出现在高密度,以及低密度的手机上,比如说一部240×320像素的手机, 如果设置android: anyDensity="false",Android系统会将240x320(低密度)转换为320×480(中密度),这样的话,应用就会在小密度手机上加载mdpi文件中的资源。 3.2是否支持大屏幕 android: largeScreens=["true"|"false"] 如果在声明不支持的大屏幕,而这个屏幕尺寸是larger的话,系统使用尺寸为("normal")和密度为("medium)显示, 不过会出现一层黑色的背景。 3.3是否支持小屏幕 android: smallScreens=["true"|"false"] 如果在声明不支持的小屏幕,而当前屏幕尺寸是smaller的话,系统也使用尺寸为("normal")和密度为("medium)显示 如果应用程序能在小屏幕上正确缩放(最低是small尺寸或最小宽度320dp),那就不需要用到本属性。 否则,就应该为最小屏幕宽度标识符设置本属性 来匹配应用程序所需的最小尺寸。 4、Android提供3种方式处理屏幕自适应 4.1预缩放的资源(基于尺寸和密度去寻找图片) 1)如果找到相应的尺寸和密度,则利用这些图片进行无缩放显示。 2)如果没法找到相应的尺寸,而找到密度,则认为该图片尺寸为"medium",利用缩放显示这个图片。 3)如果都无法匹配,则使用默认图片进行缩放显示。 默认图片默认标配"medium"(160)。 4.2自动缩放的像素尺寸和坐标(密度兼容) 1)如果应用程序不支持不同密度android: anyDensity="false",系统自动缩放图片尺寸和这个图片的坐标。 2)对于预缩放的资源,当android: anyDensity="false",也不生效。 3)android: anyDensity="false",只对密度兼容起作用,尺寸兼容没效果 4.3兼容更大的屏幕和尺寸(尺寸兼容) 1)对于你在声明不支持的大屏幕,而这个屏幕尺寸是normal的话,系统使用尺寸为 ("normal")和密度为("medium)显示。 2.)对于你在声明不支持的大屏幕,而这个屏幕尺寸是larger的话,系统同样使用尺寸为("normal")和密度为("medium)显示, 不过会出现一层黑色的背景。 5、Android系统自动适配技巧 Android系统采用下面两种方法来实现应用的自动适配: 1)布局文件中定义长度的时候,最好使用wrap_content,fill_parent,或者dp进行描述,这样可以保证在屏幕上面展示的时候有合适的大小 2)为不同屏幕密度的手机,提供不同的位图资源,可以使得界面清晰无缩放。 对应bitmap资源来说,自动的缩放有时会造成放大缩小后的图像变得模糊不清,这是就需要应用为不同屏幕密度配置提供不同的资源: 为高密度的屏幕提供高清晰度的图像等。 3)不要使用AbsoluteLayout 4)像素单位都使用DIP,文本单位使用SP 6、在代码中获取屏幕像素、屏幕密度 DisplayMetricsmetric=newDisplayMetrics(); getWindowManager().getDefaultDisplay().getMetrics(metric); intwidth=metric.widthPixels; //屏幕宽度(像素) intheight=metric.heightPixels; //屏幕高度(像素) floatdensity=metric.density; //屏幕密度(0.75/1.0/1.5) intdensityDpi=metric.densityDpi; //屏幕密度DPI(120/160/240) 具体解决方案: 1.细说layout_weight 目前最为推荐的Android多屏幕自适应解决方案。 该属性的作用是决定控件在其父布局中的显示权重,一般用于线性布局中。 其值越小,则对应的layout_width或layout_height的优先级就越高,一般横向布局中,决定的是layout_width的优先级;纵向布局中,决定的是layout_height的优先级。 传统的layout_weight使用方法是将当前控件的layout_width和layout_height都设置成fill_parent,这样就可以把控件的显示比例完全交给layout_weight;这样使用的话,就出现了layout_weight越小,显示比例越大的情况。 不过对于2个控件还好,如果控件过多,且显示比例也不相同的时候,控制起来就比较麻烦了,毕竟反比不是那么好确定的。 于是就有了现在最为流行的0px设值法。 看似让人难以理解的layout_height=0px的写法,结合layout_weight,却可以使控件成正比例显示,轻松解决了当前Android开发最为头疼的碎片化问题之一。 先看下面的styles(style_layout.xml) xmlversion="1.0"encoding="utf-8"? > --全屏幕拉伸--> layout_width">fill_parent layout_height">fill_parent --固定自身大小--> layout_width">wrap_content layout_height">wrap_content --横向分布--> layout_width">0px --纵向分布--> layout_height">0px 可以看到,layout_width和layout_height两个属性被我封装成了4个style 根据实际布局情况,选用当中的一种,不需要自己设置,Demo的布局如下(weight_layout.xml) xmlversion="1.0"encoding="utf-8"? > android=" style="@style/layout_full" android: orientation="vertical"> style="@style/layout_vertical" android: layout_weight="1" android: orientation="horizontal"> style="@style/layout_horizontal" android: background="#aa0000" android: layout_weight="1"/> style="@style/layout_horizontal" android: background="#00aa00" android: layout_weight="4"/> style="@style/layout_horizontal" android: background="#0000aa" android: layout_weight="3"/> style="@style/layout_horizontal" android: background="#aaaaaa" android: layout_weight="2"/> style="@style/layout_vertical" android: layout_weight="2" android: orientation="vertical"> style="@style/layout_vertical" android: background="#ffffff" android: layout_weight="4"/> style="@style/layout_vertical" android: background="#aa0000" android: layout_weight="3"/> style="@style/layout_vertical" android: background="#00aa00" android: layout_weight="2"/> style="@style/layout_vertical" android: background="#0000aa" android: layout_weight="1"/> 整个界面布局看起来非常直观,只是嵌套的逻辑要自己理下。 显示效果如下图,其中左面一个是480x800的界面,右面的是320x480的界面(后面的图也如此),可以看出显示比例和代码中完全一致,我就不多说了,大家对照下就能看出来了。 2.自定义尺寸法 这个是我自己想出来的方法,可能是个比较笨的方法,所以没有多少人提过用这种方法解决自适应的问题。 虽然这个方法缺点也很多,但有时候也是个不错的方法。 先看下面这张图 可以看到我定义了两套尺寸文件,我们可以看下其中一个文件 xmlversion="1.0"encoding="utf-8"? >
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- android 屏幕