转自http://blog.sina.com.cn/s/blog_74c22b210100tn3o.html
如何将一个应用法度适配在不合的手机上,固然这不算是一个技巧题目,然则对于方才做屏幕的开辟人员来说,还真不是一件多么简单的工作。
起首:你须要在AndroidManifest.xml文件的<manifest>元素如下添加子元素
<supports-screens android:largeScreens="true"
android:normalScreens="true" android:anyDensity="true"
android:smallScreens="true"></supports-screens>
名如其意,以上是为我们的屏幕设置多辨别率支撑(更正确的说是适配大、中、小三种密度)。android:anyDensity="true" ,这一句对全部的屏幕都起着十分首要的感化,值为true,我们的应用法度当安装在不合密度的手机上时,法度会分别加载hdpi,mdpi,ldpi文件夹中的资料。
相反,若是值设置为false,即使我们在hdpi,mdpi,ldpi文件夹下拥有同一种资料,那么应用也不会主动地去响应文件夹下寻找资料,这种景象都是呈如今高密度,以及低密度的手机上,比如说一部240×320像素的手机,若是设置android:anyDensity="false",Android体系会将240 x 320(低密度)转换为 320×480(中密度),如许的话,应用就会在小密度手机上加载mdpi文件中的资料。
2.细心的人会发明自android2.0开端之后drawable文件被三个文件夹drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹所庖代,有些编程人员为了让应用法度默认地加载某些图片,他们会特地地去在android2.0之后的应用法度中从头创建drawable文件夹,其实如许做完全没有须要,经由过程第一段的解析我们得知,android:anyDensity="false",则应用会将大小密度改变成中密度,从而去加载mdpi中的资料。这里同样,当android:anyDensity="false",则应用会去加载mdpi中的资料。
总结一下:
第一:android:anyDensity="true",体系会根据屏幕密度,主动去找对应的文件夹
第二:android:anyDensity="false",
(1) 若是drawable-hdpi,drawable-mdpi,drawable-ldpi三个文件夹中有同一张图片资料的不合密度默示,那么体系会去加载drawable_mdpi文件夹中的资料
(2) 若是drawable-hpdi中有高密度图片,其它两个文件夹中没有对应图片资料,那么体系会去加载drawable-hdpi中的资料。
(3) 若是drawable-hdpi,drawable-mdpi中有图片资料,drawable-ldpi中没有对应的图片资料,那么体系会加载drawable-mdpi文件夹中的资料
3. 重视上图各类文件夹的不合默示。
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文件进行设置
值得一提的是:
<dimen name="bitmap_common_topoffset">40dp</dimen>
<dimen name="bitmap_common_bottomoffset">-14dp</dimen>
这里的负数是完全起感化的,体系会认为它是一个负值
4. 各大手机厂商对于Android操纵体系都有或多或少的批改,当然这些批改会对我们应用法度产生某些影响
比如:
(1)体系源代码中连接music办事的aidl文件地点包名:com.android.music
(2)LG则可能将该aidl文件批改地点的包(例如批改为 com.android.music.player),并且批改此中的文件内容(增长一个办法,或者削减几个办法,或者批改办法名称)那么我们的应用要想在LG的手机上公布,那么我们就必须改变所要连接的aidl文件,必须跟LG厂商批改的完全一致。