SDK#屏幕兼容性模式

隐身守侯 提交于 2019-12-06 23:23:59

        如果你在Android3.0版本或低于Android3.0版本下开发了一款应用,而且它能够在大屏幕上(如平板电脑)合理的调整尺寸,为了保持更好的用户体验,你应该禁掉屏幕兼容性模式。

        从Android1.6开始,安卓已支持各种屏幕尺寸,并且为了适配每种屏幕做了很多工作去改变应用布局的大小。但是,如果你的应用没有按照Supporting Multiple Screens指南行事,就可能在大屏幕上遇到麻烦,对于这种问题的应用程序,屏幕兼容性模式可以让应用程序在大屏幕上表现的更好用一些。

        有两个版本的屏幕兼容性模式,它们略有不同:

         Version 1 (Android 1.6 - 3.1)

        系统在一个“邮票“窗口上绘制应用的UI,也就是说,系统绘制应用的布局与在正常大小的手机相同(模拟一个320dp*480dp的屏幕),屏幕剩余的空间由布局周围的黑色边框填充。

        这介绍了 Android 1.6 处理仅为 320dp x 480dp 的原始屏幕大小而设计的应用程序。因为只有很少的活跃的android设备仍然在运行 Android 1.5,大部分的应用在 Android 1.6 或更高版本上被开发,不应该在大屏幕上开启这个版本的兼容性模式,这个版本被认为是过时的。

        要禁掉这个版本的屏幕兼容模式,只需要简单地设置android:minSdkVersion或者android:targetSdkVersion为4(Android1.6),或者设置android:resizeable为true。

        Version 2 (Android 3.2 and greater)

        系统绘制应用布局同在正常尺寸的手机(大约模拟320dp*480dp的屏幕),然后放大来填充屏幕,这最终会让你的布局变得更大,这会导致UI的失真.

        这个版本是在Android 3.2引入的,进一步协助大屏幕设备上的应用(没有遵照Supporting Multiple Screens指南的应用)。

        通常,运行Android3.2或者更高Android版本的大屏幕设备,当应用没有在manifest文件中显示的声明它支持大屏幕设备时,允许用户开启屏幕兼容性模式。在这种情况下,一个向外箭头样子的图标会出现在系统bar的时钟的旁边,(据自测,4.4.4版本的平板没有这个icon,4.1.1版本的有),允许用户切换屏幕兼容性模式,如图,一个应用可以显式地声明它不支持大屏幕,这样,屏幕兼容性模式总是开启的,用户不能禁掉他。作为开发者,你可以控制应用何时开启屏幕兼容性模式。

Disabling Screen Compatibility Mode

        如果你主要在Android3.0(SDK Level 11)之前开发应用,但是你的应用可以恰当地为大屏幕调整布局大小,为了维护最佳的用户体验,你应该禁止掉屏幕兼容性模式。否则,用户可能开启屏幕兼容性模式,以一个不太理想的方式来体验你的应用。

        默认地,当以下条件满足时,运行Android 3.2及以上版本的设备的屏幕兼容性模式,对用户是一个可选择的特性:

  • 你的应用已经设置android:minSdkVersion和android:targetSdkVersion为“10”或者更低的版本,并且没有使用<supports-screens>元素显式地声明支持大屏幕。
  • 你的应用已经设置android:minSdkVersion或者android:targetSdkVersion为“11”或者更高版本,并且使用<supports-screens>元素显式地声明不支持大屏幕

        要完全地禁掉屏幕兼容性模式用户选项,移除系统bar上的图标,你可以按照下面的方式做:

  • 最简单的方式

        在你的manifest文件中,增加<supports-screens>元素,并且指定android:xlargeScreens属性为“true”<supports-screens android:xlargeScreens="true" />
        这声明了你的应用支持全部的大屏幕尺寸,所以,系统总会调整你的布局尺寸来适应屏幕,这与你在<uses-sdk>元素中设置的值无关。

  • 简单,但是会有其他的影响:

        在你的manifest的<uses-sdk>元素中,设置android:targetSdkVersion为“11”或者更高<uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11" />
        这声明了你的应用支持Android3.0,而Android3.0是为大屏幕设备如tablets设计的。

        注意:当运行在Android3.0或者更高的版本时,系统会为你的UI开启Holographic主题,为Activity增加Action Bar,在系统bar上移除Options Menu 按钮。

        如果屏幕兼容性模式仍然开启,检查你的manifest的<supports-screens>元素,确保没有属性设置为“false”。最佳实践是总是使用<supports-screens>元素显式地声明对不同尺寸屏幕的支持。

Enabling Screen Compatibility Mode

        当你的应用针对Android3.2(API level 13)或者更高Android版本,可以通过<supports-screens>元素的属性设置,来影响某些屏幕是否开启屏幕兼容性模式。

        注意:屏幕兼容性模式并不是一个应用想运行的模式—因为布局放大会导致UI的模糊。要让你的应用在大屏幕上表现良好,最恰当的方式是遵守Supporting Multiple Screens指导,并且为不用的屏幕尺寸提供可替换的布局。

        默认地,当你设置了android:minSdkVersion或者android:targetSdkVersion为“11”(或者更高)属性时,屏幕兼容性模式对于用户是不可用的。如果你的应用没有为大屏幕适当的调整大小,你可以选择开启屏幕兼容性模式,采用以下方式:

  • 在manifest文件中,增加<supports-screens>元素并且指定android:compatibleWidthLimitDp属性的值为"320"
<supports-screens android:compatibleWidthLimitDp="320" />

        这表示你的应用设计的目标最大的"最小屏幕宽度”为320dp。这种方式,任何设备最小的宽度大于这个值会提供屏幕兼容性模式作为用户可选特性。

        注意:目前,屏幕兼容性模式只能模拟320dp宽的手机,所以屏幕兼容性模式不能应用于android:compatibleWidthLimitDp的值大于320dp的设备。

  • 如果为大屏幕调整布局尺寸时,你的应用出现问题,并且,你想强制用户处于屏幕兼容性模式(而不是简单的提供一个选项),你可以使用android:largestWidthLimitDp 属性。
<supports-screens android:largestWidthLimitDp="320" />

        这个设置与android:compatibleWidthLimitDp一样,这个设置还会强制开启屏幕兼容性模式,不允许用户禁掉它。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!