由于Android碎片化严重,导致开发中一套代码在不同手机上运行起来效率不是很好,兼容性不是很好,这就需要对不同分辨率不同屏幕大小的手机做屏幕适配
1.AnfroidManifest.xml设置
在Menifest中添加子元素
android:anyDensity="true"时,应用程序安装在不同密度的终端上时,升序会分别加载 xxhdpi,xhdpi,hdpi,mdpi,ldpi文件夹中的资源。
相反,如果设为false.即使在文件夹下拥有相同的资源,应用也不会自动地去相应的文件夹下寻找资源:
(1).如果drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹中有同一张图片资源的不同密度表示,那么系统会去加载drawable-mdpi文件夹中的资源。
(2).如果drawable-hdpi中有高密度的图片,其他两个文件夹中没有对应图片资源,那么系统会去加载drawable-hdpi中的资源,其他同理;
(3).如果drawable-hdpi,drawable-mdpi中有图片资源,drawable-ldpi中没有,系统会加载drawable-mdpi中的资源,其他同理,使用最接近的密度级别
2.横屏竖屏目录区分
(1).drawable
(a).drawable-hdpi该图片即适用于横屏,也适用于竖屏
(b).drawable-land-hdpi 当屏幕为竖屏,且为高密度时,加载此文件夹的资源;
(c).drawable-port-hdpi, 当屏幕为竖屏,且为高密度时,加载此文件夹的资源,其他同理。
(2)layout
在res 目录下建立layout-port和layout-land两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换
多屏幕适配的4条黄金原则
(1).在layout文件中设置控件尺寸时采用fill_parent,wrap_content,match_parent和dp;
具体来说,设置view属性 android:layout_width和android_height的志时,wrap_content,match_parent或dp 比px更好,文字大小应该使用sp来定义;
(2).在程序的代码中不要出现具体的像素值,在dimens.xml中定义;
为了使代码简单,android内部使用pix为单位表示控件的尺寸,但是这是基于当前屏幕基础上的。 为了适应多种屏幕,android建议开发者不要使用具体的像素来表示控件尺寸。
(3).不使用AbsoluteLayout,可以使用RelativeLayout替代;
(4).对不同的屏幕提供合适大小的图片。
不同大小屏幕用不同大小的图片,low:medium:high:extra-high图片大小的比例为3:4:6:8;举例来说,对于中等密度(medium)的屏幕图片像素大小为4848,那么低密度(low)屏幕图片的大小为3636,高(high)屏幕的图片大小应为u3636,extra-high为9696.
使用9-patch PNG图片
使用图片资源时,如果出现拉伸,因为图片处理的原因会变形,导致界面走形。9-patch PNG 图片也是一种标准的PGN图片。在原生PNG 图片四周空出一个像素间隔,用来标识PNG图片中哪些部分可以拉伸,哪些不可以拉伸,背景上的边框位置等。
”上“ ”左“ 定义可拉伸区域
”右“ ”下“ 定义显示区域,如果用到完整填充的背景图,建议不要通过android:padding来设置边距,而是通过9-patch方式来定义