Register now for Android Dev Summit 2019!

声明受限屏幕支持

尽管我们强烈建议您在设计应用时使其适合所有屏幕尺寸和密度,但您可能仍不希望自己的应用支持某些屏幕配置。 如果是这样,您可以限制 Android 可在多大程度上调整应用的大小,甚至限制哪些设备可以安装该应用(如本文所述)。

在限制应用仅支持特定屏幕之前,您应该了解可支持多种屏幕的所有技术,并尽最大努力实现这些技术。

针对不同的屏幕发布单独的 APK

如果您无法构建支持所有屏幕配置的单个 APK,Google Play 可让您针对同一应用详情发布多个 APK。 您可以使用此功能提供单独的 APK 来支持不同的屏幕配置(如 manifest 文件中所声明),而无需在 Google 应用商店中创建单独的详情。

例如,如果您想同时发布手机版和平板电脑版应用,但无法让一个 APK 适用于这两种屏幕尺寸,则可以针对同一应用详情发布两个 APK。 Google Play 会根据每种设备的屏幕配置下载与其屏幕尺寸相匹配的 APK。

如需了解详细信息,请参阅针对不同的屏幕尺寸创建多个 APK

声明最大长宽比

为了支持尽可能多的设备,应用应动态调整其布局,以确保其内容和控件可见且结构清晰。

大多数应用还应该可调整大小,以便用户可以在多窗口模式下运行应用。 用户可以在分屏和自由窗口模式下启动可调整大小的 Activity,并通过拖动其边或角来更改该 Activity 的大小。

多窗口模式适用于在 Android 7.0(API 级别 24)或更高版本中运行的所有应用,并且应用默认可调整大小。 您还可以为整个应用或特定 Activity 明确设置 android:resizeableActivitytrue 属性。

如果您不希望自己的应用或 Activity 在多窗口模式下运行,请设置 android:resizeableActivity false。 在这种情况下,应用会始终全屏显示。 系统会根据 Android 操作系统级别控制完成此操作的方式:

  • 如果您的应用定位到 Android 8.0(API 级别 26)或更高版本,它会根据其布局填充整个屏幕。
  • 如果您的应用定位到 Android 7.1(API 级别 25)或更低版本,则系统会将应用界面的大小限制为长宽比为 16:9(约为 1.86)的窗口。 如果应用在具有较大屏幕长宽比的设备上运行,则该应用会在带黑边的 16:9 窗口中显示,从而使部分屏幕处于未占用状态。

如果您的应用布局无法适应长宽比过大的屏幕,则您可以通过设置最大长宽比在所有 Android 操作系统级别上固定采用黑边设置。 我们建议使用 2.4 (12:5) 的比例。 如果长宽比大于您指定的比例,您的应用在设备上运行时会显示黑边。 对于 Wear OS 设备,您选择的值必须至少为 1.0;对于其他设备,该值必须至少为 1.33。 如果您指定的比例小于这些限制,则系统会如上所述,根据操作系统级别限制应用的长宽比。

要为 Android 8.0(API 级别 26)和更高版本设置最大长宽比,请在您的 <activity> 标记中使用 android:MaxAspectRatio 声明最大比例。 以下示例演示了如何声明 2.4 的最大长宽比:

<!-- Render on full screen up to screen aspect ratio of 2.4 -->
<!-- Use a letterbox on screens larger than 2.4 -->
<activity android:maxAspectRatio="2.4">
 ...
</activity>

对于 Android 7.1 及更低版本,请在 <application> 元素中添加一个 名为 android.max_aspect<meta-data> 元素, 如下所示:

<!-- Render on full screen up to screen aspect ratio of 2.4 -->
<!-- Use a letterbox on screens larger than 2.4 -->
<meta-data android:name="android.max_aspect" android:value="2.4" />

如果您设置了最大长宽比,请勿忘记同时设置 android:resizeableActivity false。 否则,最大长宽比没有任何作用。

声明最大屏幕尺寸

即使并未完全优化您的应用以支持不同的屏幕尺寸,Android 仍然可以拉伸大部分应用以适应较大的屏幕。 因此,几乎从来都没有必要声明最大屏幕尺寸。

如果您决定针对不同的屏幕尺寸创建多个 APK,则无需将 APK 限制为仅适用于小屏幕,因为针对大屏幕优化的 APK 应该具有较大的 versionCode,因此 Google Play 始终都会将该 APK 提供给大屏幕设备。

但是,如果您对 Android 调整应用以适应大屏幕的方式仍不满意,则可通过在 <supports-screens> 清单标记中指定 largestWidthLimitDp 属性来禁止将大小调整到超出特定宽度。 然后,Android 会启用屏幕兼容模式(此模式会按照在您应用支持的最大尺寸屏幕上的绘制方式来绘制布局,然后放大所有像素以填充屏幕),而不是调整布局的大小。

限制应用仅支持平板电脑或电视

您可以使用 <supports-screens> manifest 元素来阻止手机设备下载您的应用。

例如,以下代码声明只有大屏幕和特大屏幕才能安装您的应用:

<manifest ... >
    <supports-screens android:smallScreens="false"
                      android:normalScreens="false"
                      android:largeScreens="true"
                      android:xlargeScreens="true"/>
    ...
</manifest>

限制应用仅支持特定尺寸和密度

您可以使用 <compatible-screens> manifest 元素来定义应用支持的确切屏幕尺寸和密度。 但是,我们强烈建议您不要使用此功能,因为您未指定的任何尺寸和密度组合都会被视为与您的应用不兼容的屏幕配置。 因此,使用此元素很容易为应用屏蔽掉很多实际支持安装此应用的设备。

<compatible-screens> 元素必须包含一个或多个 <screen> 元素。 每个 <screen> 元素都使用 android:screenSizeandroid:screenDensity 属性指定与您的应用兼容的屏幕配置 。 每个 <screen> 元素都必须同时包含这两个属性才能指定一个屏幕配置 — 缺少任一属性都会导致该元素无效(Google Play 之类的外部服务将忽略它)。

如果您的应用仅与小屏幕尺寸和标准屏幕尺寸(以及一部分屏幕密度)兼容,则 manifest 项将如下所示:

<manifest ... >
    <compatible-screens>
        <!-- all small size screens -->
        <screen android:screenSize="small" android:screenDensity="ldpi" />
        <screen android:screenSize="small" android:screenDensity="mdpi" />
        <screen android:screenSize="small" android:screenDensity="hdpi" />
        <screen android:screenSize="small" android:screenDensity="xhdpi" />
        <!-- all normal size screens -->
        <screen android:screenSize="normal" android:screenDensity="ldpi" />
        <screen android:screenSize="normal" android:screenDensity="mdpi" />
        <screen android:screenSize="normal" android:screenDensity="hdpi" />
        <screen android:screenSize="normal" android:screenDensity="xhdpi" />
    </compatible-screens>
    ...
    <application ... >
        ...
    <application>
</manifest>

未在此处明确声明的任意尺寸和密度组合都将受到限制,无法安装该应用。