Çoklu pencere modunu destekleme

多窗口模式允许多个应用同时共享同一屏幕。 应用可以并排显示,也可以上下并排显示(分屏模式), 叠加显示在其他应用上的小窗口(画中画模式),或单个窗口 在可移动、可调整大小的单独窗口中(自由窗口模式)显示应用。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
图 1. 在分屏模式下左右并排显示两个应用。

用户体验取决于 Android 版本和设备类型:

  • Android 7.0(API 级别 24)在小屏幕上引入了分屏模式 以及特定设备上的画中画模式。

    • 分屏模式:在屏幕中填充两个应用,同时显示这两个应用 可以并排显示或上下并排显示用户可以拖动分隔线 将两个应用分开,放大其中一个应用,同时缩小另一个。

    • 画中画模式:可让用户继续播放视频 同时与另一个应用交互时(请参阅画中画支持)。

    • 自由窗口模式:在此模式下,用户可以自由调整每个 activity 的大小, 由大屏设备的制造商启用。

      您可以通过指定 activity 允许的最小尺寸。您也可停用 为应用启用多窗口模式 resizeabableActivity="false",以确保系统始终显示 应用全屏

  • Android 8.0(API 级别 26)将画中画模式扩展到了小屏幕模式 屏幕设备。

  • Android 12(API 级别 31)将多窗口模式作为标准行为。

    • 在大屏设备上较大窗口大小类别), 平台支持在多窗口模式下使用所有应用,无论 配置。如果为 resizeableActivity="false",则将应用放入 兼容模式,以适应显示屏尺寸。

    • 在小屏幕紧凑窗口大小类别)上,系统会检查 activity 的 minWidthminHeight,以确定是否 activity 可以在多窗口模式下运行。如果 resizeableActivity="false",系统将禁止在以下位置运行该应用: 多窗口模式,而不考虑最小宽度和高度。

分屏模式

用户可以通过执行以下操作来启用分屏模式:

  1. 打开“最近”屏幕
  2. 将某个应用滑动到视图中
  3. 按应用标题栏中的应用图标
  4. 选择分屏菜单选项
  5. 从“最近使用的应用”屏幕中选择其他应用,或者关闭“最近使用的应用”屏幕并 运行另一个应用

用户可通过将窗口分隔线拖动到屏幕边缘来退出分屏模式,可以向上、下、左、右四个方向拖动。

启动 adjacent

如果您的应用需要通过 intent 访问内容,您可以使用 FLAG_ACTIVITY_LAUNCH_ADJACENT,可在相邻的 分屏窗口

Android 7.0(API 级别 24)中引入了 FLAG_ACTIVITY_LAUNCH_ADJACENT,以便 在分屏模式下运行的应用能够在分屏模式下启动相邻的 activity 窗口。

Android 12L(API 级别 32)及更高版本已将该标志的定义扩展到 允许全屏模式运行的应用启用分屏模式,然后启动 活动。

如需启动相邻的 activity,请在以下位置使用 FLAG_ACTIVITY_LAUNCH_ADJACENT: 与 FLAG_ACTIVITY_NEW_TASK 关联,例如:

fun openUrlInAdjacentWindow(url:
String) { Intent(Intent.ACTION_VIEW).apply { data = Uri.parse(url)
addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT or Intent.FLAG_ACTIVITY_NEW_TASK)
 }.also { intent -> startActivity(intent) } }

多窗口模式下的 activity 生命周期

多窗口模式不会更改 activity 生命周期。不过, 在不同的版本上,应用在多个窗口中的恢复状态会有所不同 Android。

多项恢复

Android 10(API 级别 29)及更高版本支持多项恢复模式 当设备处于多窗口模式时,activity 会保持 RESUMED 状态 模式。如果透明 activity 位于 activity 或 activity 不可聚焦,例如,activity 处于 画中画模式。也有可能,没有任何 activity 在 (例如,如果抽屉式通知栏打开)。onStop() 方法照常运行:每当 activity 关闭时,系统都会调用该方法 屏幕上。

部分搭载 Android 9(API 级别 28)的设备也提供多项恢复模式。如需在 Android 9 设备上选择启用多项恢复模式,请添加以下清单元数据:

<meta-data android:name="android.allow_multiple_resumed_activities" android:value="true" />

如需确认给定设备是否支持此清单元数据,请参阅设备规格。

Android 9

在 Android 9(API 级别 28)及更低版本上的多窗口模式下,在任意时间点都只有用户最近一次互动的 activity 处于活动状态。这个 activity 被视为最顶层的 activity,并且是 RESUMED 中唯一的 activity 状态。所有其他可见的 activity 均处于 STARTED 而非 RESUMED 状态。 不过,系统会为这些可见但未恢复的 activity 指定更高的优先级 相较于不可见 activity 的优先级。如果用户与 可见的 activity、该 activity 已恢复,以及之前的顶层 activity activity 进入 STARTED 状态。

如果一个处于活动状态的应用进程中有多个 activity,则 Z 轴顺序最高的 activity 为 RESUMED 状态,其他 activity 为 PAUSED 状态。

配置变更

当用户将应用置于多窗口模式时,系统会通知 处理配置 更改。当用户调整应用大小或将应用放回原位时,也会发生这种情况 进入全屏模式

从本质上讲,此更改对 activity 生命周期的影响与 系统会通知应用设备已从纵向模式切换为纵向模式 只不过会更改应用尺寸 只是被交换了。您的 activity 可以自行处理配置变更,或者 您的应用可以允许系统销毁 activity,然后使用 新维度。

如果用户调整窗口大小以增加窗口的高度或宽度,那么系统会调整 activity 的大小来配合用户操作,同时根据需要执行配置更改。如果应用在新曝光区域的绘制滞后, 系统会使用 windowBackground 属性,或默认 windowBackgroundFallback 样式属性。

专属资源访问权限

为了帮助支持多项恢复功能,请使用 onTopResumedActivityChanged() 生命周期回调。

当某个 activity 获得或失去在顶层处于已恢复状态的 activity 时,系统会调用该回调 位置,这在 activity 使用共享的单例资源时非常重要, 例如麦克风或摄像头:

override fun
onTopResumedActivityChanged(topResumed: Boolean) { if (topResumed) { // Top
resumed activity. // Can be a signal to re-acquire exclusive resources. } else {
// No longer the top resumed activity. } }

请注意,应用可能会由于其他原因丢失资源,例如,移除共享硬件。

在任何情况下,应用都应妥善处理会影响可用资源的事件和状态更改。

对于使用相机的应用 CameraManager.AvailabilityCallback#onCameraAccessPrioritiesChanged() 提示这可能是尝试访问摄像头的好时机。 此方法从 Android 10(API 级别 29)开始提供。

请注意,“resizeableActivity=false”并不保证一定能使用专属摄像头 因为其他使用摄像头的应用可能会在其他显示屏上打开。

图 2. 多窗口模式下的摄像头。

应用失去焦点时不一定非要释放相机。 例如,您可能需要在用户与广告互动时继续预览摄像头画面 最顶层新聚焦的已恢复应用。你的应用最好保留 但当它不是最顶层的已恢复应用时,但必须处理 正确连接充电盒。当最顶层处于已恢复状态的应用需要使用 摄像头打开摄像头,该应用会打开它,而您的应用会失去对它的访问权限。您的应用可以重新打开 相机应用会重新获得焦点。

应用收到 CameraDevice.StateCallback#onDisconnected() 后 回调,对摄像头设备上的后续调用将抛出 CameraAccessException

多屏幕

Android 10(API 级别 29)支持辅助显示屏上的 activity。如果 activity 在具有多个显示屏的设备上运行,则用户可以将 activity 从一个显示屏移到另一个显示屏。多项恢复适用于 跨屏方案有几个 Activity 可以在 。

应用可以指定在启动或创建其他 activity 时它应该在哪个显示屏上运行。此行为取决于清单文件以及 intent 标志和选项(由启动 activity 的实体设置)中定义的 activity 启动模式。如需了解详情,请参阅 ActivityOptions 类。 。

当 activity 移至辅助显示屏时,系统会更新上下文,调整窗口大小,并更改配置和资源。如果活动 处理配置变更时,系统会在 onConfigurationChanged();否则,系统会重新启动相应 activity。

activity 应在 onCreate() 中检查当前显示屏,并且 onConfigurationChanged()(如果处理配置更改)。确保在更改显示屏时更新资源和布局。

如果为某个 activity 选择的启动模式允许使用多个实例,则启动 可以创建一个新的 activity 实例。两个 activity 同时恢复。

<ph type="x-smartling-placeholder">
</ph> <ph type="x-smartling-placeholder">
</ph> 图 3. 一个 activity 在多个显示屏上的多个实例。

您可能还需要了解在 Google Play 上引入的多显示屏 API 。

Activity 上下文与应用上下文

在多屏幕模式下,使用适当的上下文至关重要。访问资源时,activity 上下文(已显示)与应用上下文(未显示)不同。

activity 上下文包含有关显示屏的信息,且始终会针对该 activity 所在的显示屏区域进行调整。这样,您就可以 获取有关屏幕密度或窗口指标的正确信息 应用。您应始终使用 activity 上下文(或其他基于界面的 activity) 上下文)来获取有关当前窗口或显示屏的信息。这也 会影响某些使用上下文提供的信息的系统 API(例如, 消息框概览)。

activity 窗口配置和父显示屏会定义资源和上下文。获取当前显示屏,所用代码如下所示:

val activityDisplay = activity.getDisplay()

获取当前 activity 窗口指标:

val windowMetrics = activity.getWindowManager().getCurrentWindowMetrics()

获取当前系统配置的最大窗口指标:

val maximumWindowMetrics = activity.getWindowManager().getMaximumWindowMetrics()

最大窗口指标可用来进行计算、选择布局或提前确定要提取的资源的大小。如果在 onCreate() 中提供此类指标,您便可在首次布局遍历之前做出这些决策。这些指标不应用于布置特定的视图元素; 请改用 Configuration 对象中的信息。

刘海屏

折叠和展开时,可折叠设备刘海屏的几何形状可能会有所不同。为了避免刘海屏方面的问题,请参阅支持刘海屏

辅助显示屏

您可以通过 DisplayManager 系统服务获取可用显示屏:

val displayManager =
getSystemService(Context.DISPLAY_SERVICE) as DisplayManager val displays =
displayManager.getDisplays()

使用 Display 类获取有关特定屏幕的信息,例如 用作显示大小或指示某个屏幕是否安全的标记。 不过,不要假定展示广告尺寸 分配给您的应用的显示区域请注意,在多窗口模式下 您的应用会占据显示屏的一部分

确定 activity 能否在显示屏上启动:

val activityManager =
getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager val
activityAllowed = activityManager.isActivityStartAllowedOnDisplay(context,
displayId, intent)

然后,在显示屏上启动该 activity:

val options = ActivityOptions.makeBasic()
options.setLaunchDisplayId(targetDisplay.displayId) startActivity(intent,
options.toBundle())

多显示屏支持

Android 为软件键盘、壁纸和启动器提供了多显示屏支持。

软件键盘

如果显示屏已配置为支持系统装饰,则软件键盘可以在辅助屏幕上显示。如果某个文本字段请求在该显示屏上输入,输入法会自动显示。

图 4. 辅助显示屏上的键盘。

壁纸

在 Android 10(API 级别 29)中,壁纸可以显示在辅助屏幕上。通过 框架会为每个容器创建一个单独的 WallpaperService.Engine 实例 。请确保每个引擎的外观都是独立绘制的。开发者 可以使用展示广告上下文中的 WallpaperService.Engine#getDisplayContext()。此外,请确保您的 WallpaperInfo.xml 文件设置 android:supportsMultipleDisplays="true"

图 5. 手机和辅助显示屏上的壁纸。

启动器

新的 intent 过滤器类别 SECONDARY_HOME 会为辅助屏幕提供专用 activity。该 activity 的各个实例可用在支持系统装饰的所有显示屏上,每个显示屏对应一个实例。

<activity>
    ...
    <intent-filter>
        <category android:name="android.intent.category.SECONDARY_HOME" />
        ...
    </intent-filter>
</activity>

activity 的启动模式必须符合以下条件:不会阻止多个实例,并且可以适应不同屏幕尺寸。启动模式不能是 singleInstancesingleTask

例如,Launcher3 的 AOSP 实现支持 SECONDARY_HOME 活动记录。

图 6. 手机上的 Material Design 启动器。
<ph type="x-smartling-placeholder">
</ph>
图 7.辅助显示屏上的 Material Design 启动器。

窗口指标

Android 11(API 级别 30)引入了以下 WindowManager 方法 提供在多窗口模式下运行的应用边界:

Jetpack WindowManager 库方法 computeCurrentWindowMetrics()computeMaximumWindowMetrics()提供类似的功能 但向后兼容 API 级别 14。

如需获取除当前屏幕外其他屏幕的指标,请执行以下操作: (如代码段所示):

  • 创建显示屏上下文
  • 为显示屏创建窗口上下文
  • 获取窗口上下文的 WindowManager
  • 获取应用可用的最大显示区域的 WindowMetrics

val windowMetrics =
context.createDisplayContext(display)
.createWindowContext(WindowManager.LayoutParams.TYPE_APPLICATION, null)
.getSystemService(WindowManager::class.java) .maximumWindowMetrics

已弃用的方法

Display 方法 getSize()getMetrics() 已在 API 级别 30,支持新的 WindowManager 方法。

Android 12(API 级别 31)废弃了 Display 方法 getRealSize()getRealMetrics(),并更新其行为,以更贴近 getMaximumWindowMetrics() 的行为。

多窗口模式配置

如果您的应用以 Android 7.0(API 级别 24)或更高版本为目标平台,您可以配置 以及应用的 activity 是否支持多窗口模式。您可以设置 属性来控制大小和布局。根 activity 的 属性设置会应用于其任务堆栈中的所有 activity。例如: 如果根 activity 具有 android:resizeableActivity="true",则所有 任务堆栈中的 activity 可以调整大小。在某些较大的设备上,例如 Chromebook,那么即使您指定 android:resizeableActivity="false"。如果这会破坏您的应用,您可以使用 Google Play 上的过滤器来限制您的应用在此类设备上的提供情况。

Android 12(API 级别 31)默认采用多窗口模式。在大屏设备上 (较大窗口大小类别),所有应用都在多窗口模式下运行 模式(无论应用配置如何)。在小屏设备上,系统会 活动的minWidthminHeightresizeableActivity 确定 activity 能否在多窗口模式下运行的设置。

resizeableActivity

在清单的 <activity><application> 中设置此属性 元素来为 API 级别 30 及更低级别启用或停用多窗口模式:

<application
  android:name=".MyActivity"
  android:resizeableActivity=["true" | "false"] />;

如果将此属性设置为 true,则 activity 可分屏启动。 以及自由形状模式如果将该属性设置为 false,则 activity 不会 支持多窗口模式如果该值为 false,并且用户尝试 在多窗口模式下启动 activity 时,activity 会接管整个 屏幕。

如果您的应用面向 API 级别 24 或更高级别,但您未指定 则该属性的值默认为 true。

如果您的应用以 API 级别 31 或更高级别为目标平台,则此属性在 小屏幕和大屏幕:

  • 大屏设备较大窗口大小类别):所有应用 支持多窗口模式该属性指示 activity 是否可以 调整大小。如果为 resizeableActivity="false",则将应用放入 兼容模式,以便与显示屏尺寸相符。
  • 小屏幕紧凑窗口大小类别):如果 resizeableActivity="true" 和活动最小宽度和最小高度 符合多窗口要求,那么 activity 支持多窗口模式 模式。如果为 resizeableActivity="false",则表示 activity 不支持 多窗口模式,而不考虑 activity 的最小宽度和高度。

supportsPictureInPicture

您可以在清单的 <activity> 节点中设置此属性,以指明 该 activity 支持画中画模式。

<activity
  android:name=".MyActivity"
  android:supportsPictureInPicture=["true" | "false"] />

configChanges

自行处理多窗口配置更改,例如在用户 调整窗口大小,请将 android:configChanges 属性添加到您的应用 清单 <activity> 节点,且至少具有以下值:

<activity
  android:name=".MyActivity"
  android:configChanges="screenSize | smallestScreenSize
      | screenLayout | orientation" />

添加 android:configChanges 后,您的 activity 和 fragment 会收到 对 onConfigurationChanged() 的回调,而不是被销毁并 。然后,您可以手动更新视图、重新加载资源 根据需要执行其他操作

<layout>

在 Android 7.0(API 级别 24)及更高版本中,<layout> 清单元素 支持多个属性,这些属性会影响 activity 在多窗口模式下的行为 模式:

  • android:defaultHeightandroid:defaultWidth:默认高度和宽度 在自由窗口模式下启动时的 Activity。

  • android:gravity:activity 在以下位置启动时的初始位置: 自由窗口模式。请参阅 Gravity 类获取合适的值。

  • android:minHeightandroid:minWidth:最小高度和最小宽度 分屏模式和自由窗口模式下的 activity 数量。如果用户移动 分屏模式下的分隔线,使 activity 尺寸小于 系统会将 activity 剪裁为用户的尺寸 请求。

以下代码展示了如何指定 activity 在自由窗口模式下显示时的默认尺寸、位置和最小尺寸:

<activity android:name=".MyActivity">
    <layout android:defaultHeight="500dp"
          android:defaultWidth="600dp"
          android:gravity="top|end|..."
          android:minHeight="450dp"
          android:minWidth="300dp" />
</activity>

运行时多窗口模式

从 Android 7.0 开始,系统提供的功能可支持 可以在多窗口模式下运行

多窗口模式下被停用的功能

在多窗口模式下,Android 可能会停用或忽略不适用于与其他 Activity 或应用共享设备屏幕的 Activity 的功能。

此外,某些系统界面自定义选项将被停用。例如: 在多窗口模式下运行的应用无法隐藏状态栏(请参见 控制系统界面可见性)。

系统会忽略对 android:screenOrientation 属性所做的更改。

多窗口模式查询和回调

Activity 类提供以下方法来支持多窗口模式 模式:

  • isInMultiWindowMode():指示 activity 是否处于 多窗口模式

  • isInPictureInPictureMode():指示 activity 是否处于 “画中画”模式

  • onMultiWindowModeChanged():每当 activity 进入或退出多窗口模式。系统会传递方法 如果 Activity 进入多窗口模式,则值为 true;如果 Activity 进入多窗口模式,则值为 false activity 正在退出多窗口模式。

  • onPictureInPictureModeChanged():系统会在每次 activity 进入或退出画中画模式。系统会通过 该方法的值为 true(如果 activity 正在进入画中画模式) 模式;如果 activity 正在退出画中画模式,则为 false。

Fragment 类公开了其中许多方法的版本;例如 Fragment.onMultiWindowModeChanged()

画中画模式

要将 activity 置于画中画模式,请调用 enterPictureInPictureMode() 如果设备执行了删除操作,则此方法不会产生任何影响 不支持画中画模式。有关详情,请参阅使用 画中画 (PIP)

多窗口模式下的新 activity

启动新 activity 时,您可以指示新 activity 应该 尽可能放在当前链接旁边使用 intent 标志 FLAG_ACTIVITY_LAUNCH_ADJACENT:告知系统尝试创建 新 activity,以便这两个 activity 共享屏幕。通过 系统会尽最大努力做到这一点,但无法保证最终结果。

如果设备处于自由窗口模式,并且您要启动新 activity,您可以 通过调用 ActivityOptions.setLaunchBounds()。如果设备 未处于多窗口模式。

在 API 级别 30 及更低级别中,如果您在任务堆栈中启动 activity, activity 会替换屏幕上的 activity,并继承其所有的多窗口模式 属性。如果您想将新 activity 作为单独的窗口启动,请在 多窗口模式,则必须在新的任务堆栈中启动它。

Android 12(API 级别 31)允许应用在多个 activity 之间拆分应用的任务窗口。您可以决定应用如何显示 (全屏、并排或堆叠)创建 XML 文件, 配置文件或进行 Jetpack WindowManager API 调用。

拖放

当两个 activity 共享屏幕时,用户可在二者之间拖放数据。(在 Android 7.0 之前,用户只能拖动 在单个 activity 中拖放数据。)为了快速添加对接受 请参阅 DropHelper API。实现全面的拖放 指南,请参阅启用拖放功能

多实例

每个根 activity 都有自己的任务,该任务在单独的进程中运行,并显示在它自己的窗口中。在单独的 窗口中,您可以使用 FLAG_ACTIVITY_NEW_TASK 标志启动新 activity。您 可将其与某些多窗口模式属性结合使用,以请求 新窗口的特定位置例如,购物应用可以显示多个窗口来比较商品。

Android 12(API 级别 31)可让您启动一个 activity 的两个实例 在同一任务窗口中并排显示。

如果您想允许用户从 应用启动器或任务栏,请确保您的启动器 Activity 设置 android:resizeableActivity="true",并且不使用 可防止多个实例例如,singleInstancePerTask activity 可以 在不同的任务中多次实例化 已设置 FLAG_ACTIVITY_MULTIPLE_TASKFLAG_ACTIVITY_NEW_DOCUMENT

请不要将多实例与多面板布局混淆,例如列表-详情 该演示文稿使用 SlidingPaneLayout,该演示文稿在单个演示文稿中运行, 窗口。

请注意,当多个实例在可折叠设备上的单独窗口中运行时,折叠状态更改可能会导致一个或多个实例移至后台。例如,假设一台设备已展开,并且有两个应用实例在折叠任一侧的两个窗口中运行。如果设备处于折叠状态,系统可能会终止其中的一个实例,而不是在较小的屏幕上尝试使窗口适应两个实例。

多窗口模式验证

无论您的应用是否以 API 级别 24 或更高级别为目标平台,您都应验证其 在多窗口模式下运行,以防用户尝试在多窗口模式下启动应用 模式。

测试设备

搭载 Android 7.0(API 级别 24)或更高版本的设备支持多窗口模式。

API 级别 23 或更低级别

当用户尝试在多窗口模式下使用应用时,系统将强制调整应用尺寸(除非应用声明使用固定的屏幕方向)。

如果您的应用未声明使用固定的屏幕方向,您应在以下位置启动应用: 运行 Android 7.0 或更高版本的设备,并尝试将应用安装到 分屏模式验证当应用 以及被强制调整大小

如果您的应用声明使用固定的屏幕方向,您应尝试将应用置于多窗口模式。确认执行此操作后,应用仍处于全屏模式。

API 级别 24 至 30

如果您的应用以 API 级别 24 至 30 为目标平台,并且未停用多窗口支持,请在分屏模式和自由窗口模式下验证以下行为:

  • 在全屏模式下启动应用,然后通过执行以下操作切换到多窗口模式: 长按 Recents 按钮。验证并确保应用正常切换。

  • 直接在多窗口模式下启动应用,并验证应用是否 才能正常启动您可以按以下方式在多窗口模式下启动应用: 最近按钮,然后长按应用的标题栏并 将其拖动到屏幕上突出显示的区域之一。

  • 拖动屏幕分隔线,调整应用在分屏模式下的大小。验证 确保应用调整大小且不会崩溃,并且必要的界面元素 可见。

  • 如果您已指定应用的最小尺寸,请尝试调整 应用,使其窗口大小小于这些尺寸。验证 您无法将应用的大小调整为小于指定的最小值 维度。

  • 完成所有测试后,确认应用性能可以接受。对于 例如,验证在完成更新后, 调整大小。

API 级别 31 或更高级别

如果您的应用以 API 级别 31 或更高级别为目标,并且主 activity 的最小宽度 和最小高度小于或等于 可用的显示区域,请验证针对 API 级别 24 列出的所有行为 30 到 30

Activity#isInMultiWindowMode()

测试核对清单

如要验证应用在多窗口模式下的性能,请尝试以下操作。除非另有说明,否则应分别在分屏模式和自由窗口模式下尝试这些操作。

  • 进入和退出多窗口模式。

  • 从您的应用切换到其他应用,并验证该应用的行为是否正常 正确。例如,如果您的应用是 播放视频时,验证当用户 与另一个应用交互。

  • 在分屏模式下,尝试移动屏幕分隔线,让应用同时显示 越来越大左右并排和上下侧分别尝试此操作 其他配置验证应用不会崩溃,必须 功能可见,且调整大小操作不需要太长时间。

  • 快速连续地执行几次调整大小的操作。验证您的应用 不会崩溃或泄漏内存。Android Studio 的内存分析器提供 有关应用内存用量的信息(请参阅检查应用的内存 内存分析器的使用情况)。

  • 在多个不同的窗口配置中正常使用应用,以及 验证应用运行正常。验证文本清晰易读, 界面元素不会因太小而无法互动。

已停用多窗口模式支持

对于 API 级别 24 到 30,如果您通过将 android:resizeableActivity="false",您应在设备上启动应用 运行 Android 7.0 到 Android 11 的设备,并尝试将应用置于分屏模式, 自由窗口模式。验证并确保执行此操作后,应用仍保持全屏模式 模式。

其他资源

如需详细了解 Android 中的多窗口支持,请参阅:

为你推荐的视频 * 注意:当 JavaScript 处于关闭状态时,系统会显示链接文字 * 设备兼容模式 * 支持大屏设备尺寸调整功能 * 处理配置变更