貌似这个适配靠谱些

 

如何将一个应用法度适配在不合的手机上,固然这不算是一个技巧题目,然则对于方才做屏幕的开辟人员来说,还真不是一件多么简单的工作。
起首:你须要在AndroidManifest.xml文件的<manifest>元素如下添加子元素
<supports-screens
android:normalScreens="true"android:anyDensity="true"
android:smallScreens="true"></supports-screens>
名如其意,以上是为我们的屏幕设置多辨别率支撑(更正确的说是适配大、中、小三种密度)。android:anyDensity=这一句对全部的屏幕都起着十分首要的感化,值为true,我们的应用法度当安装在不合密度的手机上时,法度会分别加载hdpi,mdpi,ldpi文件夹中的资料。
false,即使我们在hdpi,mdpi,ldpi文件夹下拥有同一种资料,那么应用也不会主动地去响应文件夹下寻找资料,这种景象都是呈如今高密度,以及低密度的手机上,比如说一部240×320像素的手机,若是设置android:anyDensity=Android体系会将240 x 320(低密度)转换为320×480(中密度)mdpi文件中的资料。
2.细心的人会发明自android2.0开端之后drawable文件被三个文件夹drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹所庖代,有些编程人员为了让应用法度默认地加载某些图片,他们会特地地去在android2.0之后的应用法度中从头创建drawable文件夹,其实如许做完全没有须要,经由过程第一段的解析我们得知,android:anyDensity=则应用会将大小密度改变成中密度,从而去加载mdpi中的资料。这里同样,当android:anyDensity=则应用会去加载mdpi中的资料。
第一:android:anyDensity=体系会根据屏幕密度,主动去找对应的文件夹
第二:android:anyDensity="false",
若是drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹中有同一张图片资料的不合密度默示,那么体系会去加载drawable_mdpi文件夹中的资料
若是drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资料,那么体系会去加载drawable-hdpi中的资料。
若是drawable-hdpi,drawable-mdpi中有图片资料,drawable-ldpi中没有对应的图片资料,那么体系会加载drawable-mdpi文件夹中的资料
drawable-hdpi该图片即实用于横屏,也实用于竖屏
drawable-land-hdpi,当屏幕为横屏,且为高密度时,加载此文件夹中的资料
drawable-port-hdpi,当屏幕为竖屏,且为高密度时,加载此文件夹中的资料
3.有时辰会按照须要在代码中动态地设置某个值,比如地图,地图的pin和地图的地址提示框的相对偏移量在不合密度的手机上是不合的。这时辰可以经由过程以下办法求出屏幕密度:
DisplayMetrics metric = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metric);
int densityDpi = metric.densityDpi; //屏幕密度DPI(120 / 160 / 240)
然则这种办法最好不要应用,最好的体式格式是在xml文件中不合密度的手机进行分别设置。
这里地图的偏移量可以在values-hpdi,values-mdpi,values-ldpi三种文件夹中的dimens.xml文件进行设置
<dimenname="bitmap_common_topoffset">40dp</dimen>
<dimenname="bitmap_common_bottomoffset">-14dp</dimen>

4. 各大手机厂商对于Android操纵体系都有或多或少的批改,当然这些批改会对我们应用法度产生某些影响

(1)系统源代码中连接music服务的aidl文件所在包名:com.android.music

(2)LG则可能将该aidl文件批改地点的包(例如批改为 com.android.music.player),并且批改此中的文件内容(增长一个办法,或者削减几个办法,或者批改办法名称)那么我们的应用要想在LG的手机上公布,那么我们就必须改变所要连接的aidl文件,必须跟LG厂商批改的完全一致。

 

 

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)

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

计算屏幕密度

2、怎样适配多种屏幕

 

a.在manifest里定义你的程序支持的屏幕类型,相应代码如下:
<supports-screens android:resizeable=["true"| "false"]
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两个目录,里面分别放置竖屏和横屏两种布局文件,以适应对横屏竖屏自动切换。

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。

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

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

你可能感兴趣的:(适配)