Android基础知识之屏幕兼容模式
原文:http://android.eoe.cn/topic/android_sdk
注意:如果你在低于安卓3.0的版本上进行应用开发,但其在更大屏幕的设备(比如平板电脑)上显示正常时,你就需要禁用屏幕兼任模式来保持最佳用户体验。要学习如何快速禁用用户选项,请跳转至禁用屏幕兼任模式。
屏幕兼任模式是一种改善方法,用于不能正常适配大屏设备(如平板电脑)的情况。从安卓1.6开始,系统就能支持多种屏幕尺寸,并且调整应用布局的显示,来适应每一款屏幕。然而,如果在支持多种屏幕Supporting Multiple Screens的指引下,你的应用仍不能成功适配屏幕,其问题就很有可能就出在适配更大屏幕上。对于存在这种问题的应用,屏幕兼任模式可以让其在更大屏设备上得到改善。
目前有两个版本的屏幕兼任模式,它们稍有不同:
版本一(安卓1.6-3.1)
系统将应用UI显示为“邮票”式窗口。即,系统将应用的布局认定为适应普通尺寸手机(模拟320dp x 480dp的屏幕),窗口以外的屏幕部分显示为黑色背景。
该版本随安卓1.6的产生而出现,安卓1.6的设计就是仅适用于320dp x 480dp的原始尺寸。因为现在安卓1.5的设备很少使用了,几乎所有应用都在安卓1.6或更高的平台上开发,所以应该不会有版本一的屏幕兼任模式来适配更大屏幕。该版本差不多已经过时了。
http://developer.android.com/images/screens_support/compat-zoom-thumb.png
图1. 在安卓3.2平板电脑上,应用以屏幕兼任模式运行的情况。
http://developer.android.com/images/screens_support/compat-stretch-thumb.png
图2. 图1中的应用,在禁用屏幕兼任模式下的运行情况。
要禁用该版本的屏幕适配模式,你只需要设定android:minSdkVersion或android:targetSdkVersion至 “4”或更高,或设置android:resizeable至“true”。
版本二(安卓3.2或更高)
系统按照在普通屏幕手机上的显示方式(大致模拟320dp x 480dp的屏幕)显示应用,然后进行放大,填满屏幕。实际上就是“拉大”应用布局,这通常会引起UI的伪迹或像素丢失。
该版本随着安卓3.2的产生而出现,在应用还没有实施支持多种屏幕Supporting Multiple Screens中所提及的技术时,该版本起到了进一步支持应用在最新设备上的正常显示的作用。
这样屏幕兼任模式就能一直启用,用户不可禁用。(下面的章节将会讨论如何声明支持大屏幕)。
http://developer.android.com/images/screens_support/compat-toggle.png
图3. 开关屏幕适配模式的弹出菜单(当前为禁用状态,仅正常调整)。
作为开发者,你应该掌握在何时该使用屏幕兼任模式。以下章节将告诉你,在安卓3.2或更高版本下,如何选择禁用或启用屏幕兼任模式来适配更大屏幕。
禁用屏幕兼任模式
如果你的应用最初是为低于3.0的版本开发的,而它能在更大屏幕上正常显示,那么你就应当禁用屏幕兼任模式,从而保证最佳用户体验。否则,用户也许会启用屏幕兼任模式,这样就会影响最佳的应用体验效果。
在默认下,当一下可选特性之一为true时,3.2或更高版本设备的屏幕兼任模式将可用:
· 将应用中android:minSdkVersion和android:targetSdkVersion同时设为"10"或更低,并且使用元素,* 不要声明* 支持大屏。
· 将应用中 android:minSdkVersion或android:targetSdkVersion二者之一设定文"11"或更高,并且使用元素,* 声明其不支持* 大屏。
要想完全禁用屏幕兼任模式的用户选项并且移除系统栏上的图标,你可以:
- ·最简单:*
在清单文件中,添加元素,指定android:xlargeScreens属性为“true”;
就这么简单。这样就声明了你的应用支持所有大屏幕尺寸,系统也会根据屏幕调整布局。不论你在属性中设定了什么值,它都会起作用。
- ·简单,但有其他效果:*
在清单的元素中,设定android:targetSdkVersion为“11”或更高:
这种方法可声明应用支持安卓3.0,并且可以在更大屏幕(平板电脑等)上起作用。
谨慎:3.0或更高版本上,该方法也可启用UI的全息主题,启用时将在Activity上添加Action Bar,且移除系统栏上的选项菜单按钮。
如果在你改变此处以后,屏幕兼任模式仍然启用,请检查清单中的,确认其中没有设定为“false”的属性。最佳做法是使用元素,声明其支持不同屏幕尺寸,这样你就可以一直使用该元素了。
关于针对安卓3.0设备升级应用的更多信息,请见Optimizing Apps for Android 3.0.
启用屏幕兼任模式
当应用针对安卓3.2(API等级13)或更高时,你可以使用元素,针对某些屏幕启用或禁用屏幕兼任模式。
注意:屏幕兼任模式并不是一种最佳的选择——他会因缩放而导致UI的像素丢失和虚化。让应用在大屏手机上正常显示的最佳方法,请参见支持多种屏幕,并且为不同屏幕尺寸提供替换性选择。
在默认下,当设定android:minSdkVersion或android:targetSdkVersion二者之一为“11”或更高时,屏幕兼任模式将对用户不可用。若二者之一为true,且应用不能针对大屏进行适当调整时,你选择以下一种方式,来启用屏幕兼任模式:
·在清单文件中,添加 元素并且指定android:compatibleWidthLimitDp属性为“320”:
这表明,该应用“最小屏幕宽度”的最大值为320dp。通过该方法,任何大于此值的最小屏幕值都可将屏幕兼任模式设为用户的可选特性。
注意:现今,屏幕兼任模式进模拟屏幕为320dp宽,所以,如果android:compatibleWidthLimitDp的值大于320,屏幕兼任模式将不会在任何设备上启用。
·如果应用在针对大屏调整时出现功能性崩溃,所以你想强迫用户使用屏幕兼任模式(而不仅仅是提供这个选项),你可以使用android:largestWidthLimitDp属性。
这个属性和android:compatibleWidthLimitDp效果一样,除了强制启用屏幕兼任模式而不允许用户禁用。