容易理解博文---适配

2.1之前只有drawable
(一) 几个概念
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对应 的像素点越多。
5,  Aspect Ratio(宽高比率) eg:16:9  (分辨率与宽高比接近不相等)
注:dpi(dot per inch)=  √(840(2)+400(2))/4.0 ==也就是density(屏幕的密度)


ldpi 0.75
mdpi 1
hdpi 1.5(160)
xhdpi 2
比例-3:4:5:6




(二) 3个问题
两块设备:
4寸:设备A的分辨率是800×480,设备B的分辨率是1600×960 (如果用同一套资源的话在B上的图形要比A小一半,解决方法:让B调用高pixe切图)


dip相同,设备A是4英寸tab控件显示三个页签,怎么在设备B(10英寸)中显示六个页签(写不同layoutsmall(2~3英寸)、normal(4英寸左右)、large(5~7英寸)、xlarge(7英寸以上))


设备A装的是Android2.3,设备B装的是Android4.0,而设备B没有menu建
Android3.0之前的风格与Android3.0(包含3.0)之后的风格区别很大,图中那个应用就使用了两种风格的资源及布局。Android2.3的小米会使用drawable-hdpi及layout-hdpi当中的文件,而Android4.0的小米就会使用drawable-hdpi-v11及layout-hdpi-v11里面的文件。


还可以:layout-640x360,layout-800x480


(三)关于横竖屏切换
1.建立layout-port-800x600和layout-land-800x600两个目录
2.每个activity都有这个属性screenOrientation
3.每次屏幕的切换动会重启Activity,所以应该在Activity销毁前保存当前活动的状态,在Activity再次Create的时候载入配置,那样,进行中的游戏就不会自动重启了!


有的程序是适合横竖屏切换的。如何处理呢?首先要在配置Activity的时候进行如下的配置:android:configChanges="keyboardHidden|orientation",另外需要重写Activity的 onConfigurationChanged方法
        public void onConfigurationChanged(Configuration newConfig) {
                super.onConfigurationChanged(newConfig);
                if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) {
                        // land do nothing is ok
                } else if (this.getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT) {
                        // port do nothing is ok
                }
        }

以下术语指的分辨率与屏的材质无关,主流材质是TFT

VGA:Video Graphics Array,即:显示绘图矩阵,相当于640×480 像素;
HVGA:Half-size VGA,即:VGA的一半,分辨率为480×320,像三星盖世Ace S5830就是使用这分辨率;
QVGA:Quarter VGA,即:VGA的四分之一,分辨率为320×240,一般用于小屏手机 像三星盖世Mini S5570就是使用这分辨率;
WQVGA:Wide Quarter VGA,即:扩大的QVGA,分辨率比QVGA高,比VGA低,一般是:400×240,480×272;
WVGA:Wide Video Graphics Array,即:扩大的VGA,分辨率为800×480像素,像三星i9000就是使用这分辨率;
FWVGA:Full Wide VGA ,数码产品屏幕材质的一种,VGA的另一种形式,比WVGA分辨率高,别名 : Full Wide VGA, ,其分辨 率为854×480象素(16:9)。

XGA是目前应用最广的一种屏幕,一般支持1024*768

UVGA(Ultra Video Graphics Array)是是屏幕中最贵的一种,同时也是提供分辨率最高的一种,少数超高端的大屏幕笔记本会采用此款
WXGA(1280*800/1280*768像素)
TFT是目前最好的LCD(LCD就是液晶)
TFTWXGA中的WXGA是宽屏的意思


wxga - 分类和特点
在宽屏方面,不少读者会发现有以16:10和15:10切割的屏幕,前者称为WXGA屏幕,在宽屏中比较常见,而采用15:10切割的屏幕称为WXGA+,另外还有一款超高分辨率的宽屏幕称之为WUXGA,成本太高的显示屏自然是比较少机器用的。而看一个显示屏的好坏除了看它能提供的分辨率外,还要看看屏幕本身的亮度,像现在有一些屏幕是能够提供200nits的亮度的,有一些以色彩饱满为亮点的炫丽屏等等,或者是认为对人的视角有较舒适效果的广视角宽屏,这些屏幕其本身的优点是不可否认的,但在另一方面上也存在着弊端,像高亮度的屏幕会由于亮度的增加而加大对电力的消耗引起电池使用时间的缩短,宽屏笔记本的屏幕使机身长度偏大而在移动上比较不好保护,所以读者在选购时就要根据自己的需要做出取舍了。



标屏
分辨率
宽屏
分辨率
QVGA
320×240
WQVGA
400×240
VGA
640×480
WVGA
800×480
SVGA
800×600
WSVGA
1024×600
XGA
1024×768
WXGA
1280×768/1280×800/1280*960
SXGA
1280×1024
WXGA+
1440×900
SXGA+
1400×1050
WSXGA+
1680×1050
UXGA
1600×1200
WUXGA
1920×1200
QXGA
2048×1536
WQXGA
2560×1536


1 Android手机目前常见的分辨率


1.1 手机常见分辨率:


4:3
VGA     640*480 (Video Graphics Array)
QVGA  320*240 (Quarter VGA)
HVGA  480*320 (Half-size VGA)
SVGA  800*600 (Super VGA)


5:3
WVGA  800*480 (Wide VGA)


16:9
FWVGA 854*480 (Full Wide VGA)
HD        1920*1080 High Definition
QHD     960*540
720p    1280*720  标清
1080p  1920*1080 高清


手机:
iphone 4/4s    960*640 (3:2)
iphone5         1136*640
小米1             854*480(FWVGA)
小米2             1280*720


 


1.2 分辨率对应DPI
"HVGA    mdpi"


"WVGA   hdpi "
"FWVGA hdpi "
"QHD      hdpi "
"720P     xhdpi"
"1080P   xxhdpi "


 


2 屏幕适配的注意事项
2.1 基本设置
 


2.1.1 AndroidManifest.xml设置
在中Menifest中添加子元素


android:anyDensity="true"时,应用程序安装在不同密度的终端上时,程序会分别加载xxhdpi、xhdpi、hdpi、mdpi、ldpi文件夹中的资源。


相反,如果设为false,即使在文件夹下拥有相同资源,应用不会自动地去相应文件夹下寻找资源:


1) 如果drawable-hdpi、drawable-mdpi、drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable_mdpi文件夹中的资源;


2) 如果drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源,其他同理;


3) 如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有,系统会加载drawable-mdpi中的资源,其他同理,使用最接近的密度级别。


2.1.2 横屏竖屏目录区分
1) drawable


a) drawable-hdpi该图片即适用于横屏,也适用于竖屏;


b) drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹的资源;


c) drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资源。其他同理。


2) layout


在res目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。


2.2 多屏幕适配的4条黄金原则
1) 在layout文件中设置控件尺寸时应采用fill_parent、wrap_content、match_parent和dp;


具体来说,设置view的属性android:layout_width和android:layout_height的值时,wrap_content,match_parent或dp比px更好,文字大小应该使用sp来定义。


2) 在程序的代码中不要出现具体的像素值,在dimens.xml中定义;


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


3) 不使用AbsoluteLayout(android1.5已废弃) ,可以使用RelativeLayout替代;


4) 对不同的屏幕提供合适大小的图片。


不同大小屏幕用不同大小的图片,low:medium:high:extra-high图片大小的比例为3:4:6:8;举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×48,那么低密度(low)屏幕的图片大小应为36×36,高(high)的为72×72,extra-high为96×96。


2.3 使用9-patch PNG图片
使用图片资源时,如果出现拉伸,因为图片处理的原因,会变形,导致界面走形。9-patch PNG图片也是一种标准的PGN图片,在原生PNG图片四周空出一个像素间隔,用来标识PNG图片中哪些部分可以拉伸、哪些不可以拉伸、背景上的边框位置等。


“上、左”定义可拉伸区域


“右、下”定义显示区域,如果用到完整填充的背景图,建议不要通过android:padding来设置边距,而是通过9-patch方式来定义。


Android SDK中提供了编辑9-Patch图片的工具,在tools目录下draw9patch.bat,能够立刻看到编辑后的拉伸效果,也可以直接用其他图片编辑工具编辑,但是看不到效果。


2.4 不同的layout
Android手机屏幕大小不一,有480x320, 640x360, 800x480……


怎样才能让Application自动适应不同的屏幕呢?


其实很简单,只需要在res目录下创建不同的layout文件夹,比如:layout-640x360、layout-800x480……所有的layout文件在编译之后都会写入R.java里,而系统会根据屏幕的大小自己选择合适的layout进行使用。


2.5 测试验证

一般使用AVD Manager创建多个不同大小的模拟器,如果条件具备,也可以直接用真机测试,这个比较靠谱。


转自:http://blog.csdn.net/fan1245/article/details/10174047

你可能感兴趣的:(容易理解博文---适配)