<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 是可供应用 UI 使用的屏幕空间的最短尺寸(以dp 单位表示)。也就是说,它是可用的屏幕两个尺寸中最短的尺寸。

为了让设备被视为与您的应用兼容,设备的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
另请参阅