今天刚好有做到屏幕的适配,就想到对我自己所了解到一些知识做一些简单的总结。
屏幕尺寸:既屏幕对角线的长度,单位是英寸。例如手机屏幕是5.5英寸,指的就是屏幕对角线是5.5英寸。1英寸≈2.54
厘米,那么 5.5英寸≈13.97厘米。
Android:主流机型主要为 240x320,320x480(HVGA),480x800(WVGA), 480x854(WVGA), 540x960(qHD),
640x960(DVGA),720x1280(HD), 800x1280(WXGA)。
iOS: 主流机型主要为 320x480, 640x960, 640x1136, 1024x768, 2048x1536, 这五种。
像素密度:既每英寸屏幕所拥有的像素数,像素密度越大,显示画面细节就越丰富。,单位是dpi。像素密度与屏幕尺寸
和屏幕分辨率有关,在单一变化条件下,屏幕尺寸越小、分辨率越高,像素密度越大,反之越小。
分辨率:既屏幕上显示的像素个数,单位是px,1px就是1个像素点数。分辨率160×128的意思是水平方向含有像素数为
160个,垂直方向像素数128个。屏幕尺寸一样的情况下,分辨率越高,显示效果就越精细和细腻。
dp: 和dip是一样的
dip: device independent pixels(设备独立像素). 不同设备有不同的显示效果,这个和设备硬件有关,一般我们为
了支持WVGA、HVGA和QVGA 推荐使用这个,不依赖像素。
dpi: 是dot per inch的缩写,就是每英寸的像素数,也叫做屏幕密度。这个值越大,屏幕就越清晰。Android 主流设备的 dpi 归成了四个档次,120 dpi、160 dpi、
240dpi、320 dpi
sp: scaled pixels(放大像素). 主要用于字体显示best for textsize。
px: pixels(像素). 不同设备显示效果相同,一般我们HVGA代表320x480像素,这个用的比较多。
/res |
屏幕分辨率 | 屏幕密度 | 1dp |
---|---|---|---|
xhdpi 超高分辨率 | 1280*720 | 320 | =2 |
hdpi 高分辨率 | 480*800 | 240 | =1.5 |
mdpi 中等分辨率 | 480*320 | 160 | =1 |
ldpi 低分辨率 | 320*240 | 120 | =0.75 |
屏幕尺寸分类:: small(小尺寸), normal(正常尺寸), large(大尺寸), xlarge(超大尺寸)
密度分类: ldpi (低密度), mdpi (中密度), hdpi (高密度), xhdpi (超高密度)
drawable-ldpi values-ldpi drawable-large-hdpi
drawable-mdpi values-mdpi drawable-large-mdpi
drawable-hdpi values-hdpi drawable-large-xhdpi
drawable-xhdpi values-xhdpi
方向分类:land(横向屏幕), port(纵向屏幕)
layout-port layout-land
values-fi-land values-fi-port
drawable-hdpi该图片即适用于横屏,也适用于竖屏;
drawable-hdpi该图片即适用于横屏,也适用于竖屏;
drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源。
分辨率分类:
(1)以分辨率来新建文件夹
320x240 | values-ldpi-320x240 |
480x320 | values-480x320 |
800x480 | values-800x480 |
854x480 | values-854x480 |
960x540 | values-960x540、values-hdpi-960x540 |
960x640 | values-960x640、values-xhdpi-960x640 |
1024x600 | values-mdpi-1024x600 |
1280x720、1280x800 | values-1280x720 |
其他 | values-xhdpi-1184x768、values-xhdpi-1280x720、values-xhdpi-1920x1080 |
(2)以宽度来新建文件夹
这是以最小宽度来限制,既适配该宽度以上的手机(但是适用于平板和电视)
宽度 | 文件夹 | 其他 |
300 | values-sw300dp | values-small(可以当做sw=300计算) |
320 | values-sw320dp | values-normal(可以当做sw=320计算) |
340 | values-sw340dp | |
360 | values-sw360dp | |
400 | values-sw400dp | |
480 | values-sw480dp | values-large(可以当做sw=480计算) |
520 | values-sw520dp | |
600 | values-sw600dp | |
720 | values-sw720dp | values-xlarge(可以当做sw=720计算) |
当然,这些适配的文件夹也可以使用代码自动生成,在这里我就不作解释了,可以参考网址 http://blog.csdn.net/lmj623565791/article/details/45460089
参考http://blog.csdn.net/lmj623565791/article/details/45460089
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”/>
1) 在layout文件中设置控件尺寸时应采用fill_parent、wrap_content、match_parent,如果屏幕放不下了,可以使用 ScrollView(可
以上下拖动);但是现在要尽量使用match_parent而不是fill_parent。当然在布局中遇到设置具体的数值宽度、高度和距离时,要
用单位dp;当遇到给字体设置大小时要用单位sp。
具体来说,设置view的属性android:layout_width和android:layout_height的值时,wrap_content,match_parent或dp比px更
好,文字大小应该使用sp来定义。
2) 在程序的代码中不要出现具体的像素值,应该先在dimens.xml中定义,然后再代码中引用;
为了使代码简单,android内部使用px为单位表示控件的尺寸,但这是基于当前屏幕基础上的。为了适应多种屏幕,android建议
开发者不要使用具体的像素来表示控件尺寸。
3) 在XML布局中,应尽量使用LinearLayout、RelativeLayout和FrameLayout;
4) 使用 weight 权重适配
只能用在线性控件中,比如LinearLayout。
竖直方向上使用权重的控件高度必须为0dp(Google官方的推荐用法)
水平方向上使用权重的控件宽度必须为0dp(Google官方的推荐用法
5)尽量使用9-patch图,可以自动的依据图片上面显示的内容被拉伸和收缩。其中在编辑的时候,灰色区域是被拉伸的,上下两个点
控制水平方向的拉伸,左右两点控制垂直方向的拉伸
6) 横竖屏幕的切换
1、Android 应用程序支持横竖屏幕的切换,Android中每次屏幕的切换动会重启Activity,所以应该在Activity销毁(执行onPause()方
法和 onDestroy()方法)前保存当前活动的状态;在Activity 再次创建的时候载入配置,那样,进行中的游戏就不会自动重启了!
有的程序适合从竖屏切换到横屏,或者反过来,这个时候怎么办呢?可以在配置Activity 的地方进行如下的配置:
android:screenOrientation="portrait"(landscape是横向,portrait是纵向)。这样就可以保证是竖屏总是竖屏了。
2、而有的程序是适合横竖屏切换的。如何处理呢?首先要在配置 Activity的时候进行如下的配置:
android:configChanges="keyboardHidden|orientation" , 另 外 需 要 重 写 Activity 的onConfigurationChanged方法。
参考:
http://blog.csdn.net/lmj623565791/article/details/45460089
http://blog.csdn.net/jdsjlzx/article/details/45891551