由于android屏幕各种各样,像素各不相同,sdk不断更新,android开发适配也成了必学的技能之一,根据网上的资料和自己的一些总结,把各种适配再次总结一下供大家批评学习。
(1),横竖屏的适配
平常我们在做项目的时候,一般公司不做特殊要求的话,我们会把屏幕设置成单一的横屏或竖屏,设置的方法是去AndroidMaifest.xml中把activity中的android:screenOrintation设置成landscape或者portrait,这种单一的屏幕模式。如果设置成"sensor"——有物理的感应器来决定。如果用户旋转设备这屏幕会横竖屏切换。的时候有什么需要注意的呢。1,布局问题 2,重新载入问题
1,布局问题
①在res目录先建立layout-land和layout-port目录相应的xml文件名字相同,然后在两个文件夹下创建相同名字的两套xml,模拟器就会根据不同的屏幕来进行自动寻找。
②也可以只在layout中创建xml,通过this.getResources().getConfiguration().orientation来判断当前是横屏还是竖屏,然后在oncreate方法中加载不同的布局
2,重新载入问题。
如果不需要重新载入(重新走一遍activity的生命周期),则在AndroidManifest.xml中activity标签下设置android:configChanges="orientation|keybordHidden",这样的话就不会重复调用activity的生命周期方法,切换时只会调用onConfigChanged(Configuration newconfig)。如果需要重新载入,则不需要添加属性。
(2),屏幕大小的适配和像素适配
android屏幕花样很多,给开发人员带来的一个问题就是要做各种屏幕的适配。先做一下知识回顾
①屏幕尺寸:单位inch,指的是屏幕对角线的长度。
②屏幕密度:单位dpi,指的是单位inch上面显示的多少像素px。
③屏幕分辨率:单位px*px,指的一屏显示多少像素点。
④刻度无关像素:单位sp,指的是自适应字体的像素,用来设置字体。
可以根据屏幕的尺寸,宽高比,利用勾股定理计算出屏幕的高和宽
再根据屏幕的分辨率来计算出屏幕竖向和横向的dpi。然后根据自己的dpi去适配不同的drawble
ldpi(低密度-120dpi)
dpi(低密度-160dpi) 3:4:6:8
hdpi(低密度-240dpi)
xdpi(低密度-320dpi)
由于不同的dpi对应的像素中单位换算,对应的换算是1dp = 0.75px,1dp = 1px,1dp = 1.5px,1dp = 2px
如此可知控件使用dp是适应不同像素的原则。
1,适应屏幕大小的适配方法res下建不同的layout
实现方式: Layout-small/
Layout-normal/
Layout-large/
layout-xlarge/
注释:如果同时要适应横竖屏可以 layout-xlarge-land/layout-xlarge-port
2,适应不同dpi(单位inch下的像素点)
我们创建不同像素大小的图片放在下面的目录下
drawable-hdpi
drawable-ldpi
drawable-mdpi
drawable-xhdpi
3,不同的layout下面,会使用到不同的value值
根据目前的调查,在市面上的平板,基本上属于mdpi和hdpi的,少数属于tvdpi(如google出的nexus7),所以我们选择这三种密度考虑适配;此外手机应用大多数都是竖屏使用,但平板作为娱乐性的一款产品,横竖屏均有使用的时候,所以我们还需要考虑到屏幕状态进行适配;最后考虑到有的rom会将虚拟键计算到屏幕尺寸里,还要考虑到虚拟键所占用的长宽。
那么如何根据这三个属性来进行适配呢?Android在资源文件values用文件名的方式提供了限定符可以帮助我们判断上述情况,限定符(mdpi,tvdpi,hdpi)可以帮助我们判断屏幕密度,限定符(land,port)可以帮助我们区分屏幕横竖屏状态,而限定符(1024x600...)可以适配计算虚拟键或者不计算虚拟键的屏幕,限定符的详细说明请参见Android SDK文档中开发者指南的Supporting Multiple Screens话题。
最终适配文件夹如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/f407c9009ecd8b4780a205f8d27caabc.png)
(3),android机型的适配给个连接完事
http://www.csdn.net/article/2015-09-08/2825645/1
(4),android适配不同的sdk
永远用最新的sdk,这是google官方给出的建议,你的app能运行的Android版本不是由SDK决定的,是由每一个项目的minSDK决定的。SDK都是向下兼容的。SDK在不断改进中,新的SDK会提供更强大开发工具,而且用4.0的SDK编译的2.1的apk的执行效率会比用2.1的SDK编译的更高。
下面是一些比较详细的解析:
横竖屏:http://blog.csdn.net/jiangxinyu/article/details/8600407
屏幕大小和像素:
http://www.cnblogs.com/zealotrouge/archive/2012/11/23/2784774.html