<supports-screens>

语法
<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"/>
包含于
<manifest>
说明

允许您指定应用支持的屏幕尺寸,并为大于应用支持尺寸的屏幕启用屏幕兼容模式。在应用中始终使用此元素来指定应用支持的屏幕尺寸,这一点很重要。

注意:屏幕兼容模式不是您希望应用运行的模式。它会导致您的 UI 因缩放而出现像素化和模糊。使您的应用在大屏幕上正常运行的正确方法是遵循屏幕兼容性概览并为不同屏幕尺寸提供替代布局。

如果应用能够正确调整大小以填充整个屏幕,则表示它“支持”给定的屏幕尺寸。系统应用的正常大小调整适用于大多数应用,您无需额外做任何工作即可使您的应用在大于手持设备的屏幕上运行。

不过,通常情况下,通过提供替代布局资源,优化应用的 UI 以适应不同屏幕尺寸非常重要。例如,您可能希望在 Activity 运行于平板电脑上时修改其布局,而不是在手持设备上运行时。

但是,如果您的应用在调整大小以适应不同屏幕尺寸时无法正常工作,您可以使用<supports-screens>元素的属性来控制您的应用是仅分发到较小屏幕,还是通过系统的屏幕兼容模式将其 UI 放大或“缩放”以适应更大屏幕。

如果您没有针对大屏幕尺寸进行设计,且正常的尺寸调整未能达到适当的效果,屏幕兼容模式会通过模拟正常尺寸屏幕和中等密度来缩放您的 UI。然后它会放大,使其填充整个屏幕。请注意,这会导致您的 UI 出现像素化和模糊,因此最好优化您的大屏幕 UI。

注意:Android 3.2 引入了新属性:android:requiresSmallestWidthDpandroid:compatibleWidthLimitDpandroid:largestWidthLimitDp。如果您正在为 Android 3.2 及更高版本开发应用,请使用这些属性声明屏幕尺寸支持,而不是基于通用屏幕尺寸的属性。

关于屏幕兼容模式

屏幕兼容模式是针对未正确设计以利用更大屏幕尺寸的应用的最后手段。这不是您希望应用运行的模式,因为它可能会提供糟糕的用户体验。屏幕兼容模式有两个版本,具体取决于应用运行的设备版本。

在 Android 1.6 到 3.1 版本上,系统会在“邮票”窗口中运行您的应用。它会模拟一个 320dp x 480dp 的屏幕,并用黑色边框填充屏幕的其余区域。

在 Android 3.2 及更高版本上,系统会像在 320dp x 480dp 屏幕上一样绘制布局,然后将其放大以填充屏幕。这通常会导致您的 UI 中出现模糊和像素化等伪影。

有关如何正确支持不同屏幕尺寸以避免在应用中使用屏幕兼容模式的更多信息,请阅读屏幕兼容性概览

属性
android:resizeable
指示应用是否可调整大小以适应不同屏幕尺寸。此属性默认值为"true"。如果设置为"false",系统会在大屏幕上以屏幕兼容模式运行您的应用。

此属性已弃用。它是在 Android 1.5 到 1.6 版本之间引入的,旨在帮助应用过渡,当时首次引入了对多屏幕的支持。请勿使用它。

android:smallScreens
指示应用是否支持“小”屏幕外形规格。小屏幕定义为宽高比小于“正常”屏幕或传统 HVGA 屏幕的屏幕。不支持小屏幕的应用不可用于来自外部服务(例如 Google Play)的小屏幕设备,因为平台几乎无法使此类应用在较小屏幕上运行。此属性默认值为"true"
android:normalScreens
指示应用是否支持“正常”屏幕外形规格。传统上这是 HVGA 中等密度屏幕,但 WQVGA 低密度和 WVGA 高密度也视为正常。此属性默认值为"true"
android:largeScreens
指示应用是否支持“大”屏幕外形规格。大屏幕定义为明显大于“正常”手持设备屏幕的屏幕。因此,应用可能需要一些特殊处理才能充分利用它,尽管它可能依赖于系统调整大小以填充屏幕。

此属性的默认值在某些版本之间有所不同,因此最好明确声明此属性。请注意,将其设置为"false"通常会启用屏幕兼容模式

android:xlargeScreens
指示应用是否支持“超大”屏幕外形规格。超大屏幕定义为明显大于“大”屏幕的屏幕,例如平板电脑或更大的设备。应用可能需要一些特殊处理才能充分利用它,尽管它可能依赖于系统调整大小以填充屏幕。

此属性的默认值在某些版本之间有所不同,因此最好明确声明此属性。请注意,将其设置为"false"通常会启用屏幕兼容模式

此属性是在 API 级别 9 中引入的。

android:anyDensity
指示应用是否包含可适应任何屏幕密度的资源。

对于支持 Android 1.6 (API 级别 4) 及更高版本的应用,此属性默认值为"true"请勿将其设置为"false",除非您绝对确定您的应用需要如此。唯一可能需要禁用此功能的情况是,如果您的应用直接操作位图。有关更多信息,请参阅屏幕兼容性概览

android:requiresSmallestWidthDp
指定应用所需的最小smallestWidthsmallestWidth 是屏幕空间的最短尺寸,以dp单位表示,必须可用于您的应用 UI。也就是说,它是可用屏幕两个尺寸中最短的。

设备若要与您的应用兼容,其smallestWidth必须等于或大于此值。通常,您为此提供的值是您的布局支持的“最小宽度”,无论屏幕当前方向如何。

例如,典型手持设备屏幕的smallestWidth为 320dp,7 英寸平板电脑的smallestWidth为 600dp,10 英寸平板电脑的smallestWidth为 720dp。这些值通常是smallestWidth,因为它们是屏幕可用空间的最短尺寸。

与您的值进行比较的尺寸会考虑屏幕装饰和系统 UI。例如,如果设备显示屏上有一些持久性 UI 元素,系统会将设备的smallestWidth声明为小于实际屏幕尺寸的值,因为这些屏幕像素不适用于您的 UI。

如果您的应用能够正确调整大小以适应较小的屏幕尺寸,直至“小”尺寸或最小宽度 320dp,则无需使用此属性。否则,请为此属性使用一个值,该值应与您的应用用于最小屏幕宽度限定符 (sw<N>dp) 所使用的最小值匹配。

注意:Android 系统不关注此属性,因此它不会影响您的应用在运行时的行为。相反,它用于在 Google Play 等服务上为您的应用启用过滤。但是,Google Play 目前不支持此属性在 Android 3.2 上进行过滤,因此如果您的应用不支持小屏幕,请继续使用其他尺寸属性。

此属性是在 API 级别 13 中引入的。

android:compatibleWidthLimitDp
此属性允许您通过指定应用设计的最大“最小屏幕宽度”,将屏幕兼容模式作为用户可选功能启用。如果设备的可用屏幕最短边大于您在此处设置的值,用户仍然可以安装您的应用,但系统会提示他们在屏幕兼容模式下运行。

默认情况下,屏幕兼容模式处于禁用状态,您的布局会像往常一样调整大小以适应屏幕。系统栏中有一个按钮,允许用户切换屏幕兼容模式。

如果您的应用兼容所有屏幕尺寸并且其布局能够正确调整大小,则无需使用此属性。

注意:目前,屏幕兼容模式仅模拟宽度为 320dp 的手持设备屏幕,因此如果您的android:compatibleWidthLimitDp的值大于320,则不会应用屏幕兼容模式。

此属性是在 API 级别 13 中引入的。

android:largestWidthLimitDp
此属性允许您通过指定应用设计的最大“最小屏幕宽度”来强制启用屏幕兼容模式。如果设备的可用屏幕最短边大于您在此处设置的值,应用将以屏幕兼容模式运行,用户无法禁用。

如果您的应用兼容所有屏幕尺寸并且其布局能够正确调整大小,则无需使用此属性。否则,请首先考虑使用android:compatibleWidthLimitDp属性。仅当您的应用在调整为更大屏幕尺寸时功能损坏,且屏幕兼容模式是您的应用唯一可用的方式时,才使用android:largestWidthLimitDp属性。

注意:目前,屏幕兼容模式仅模拟宽度为 320dp 的手持设备屏幕,因此如果您的android:largestWidthLimitDp的值大于320,则不会应用屏幕兼容模式。

此属性是在 API 级别 13 中引入的。

引入于
API 级别 4
另请参阅