<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 以适应不同的屏幕尺寸。例如,您可能希望在平板电脑上运行活动时修改活动的布局,而不是在手机设备上运行时。

但是,如果您的应用程序在调整大小以适应不同的屏幕尺寸时效果不佳,则可以使用<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
另请参阅