画中画 (PiP) 是一种特殊的多窗口模式,主要用于视频播放。它允许用户在屏幕一角固定的小窗口中观看视频,同时在应用之间导航或在主屏幕上浏览内容。
PiP 利用 Android 7.0 中提供的多窗口 API 来提供固定的视频叠加窗口。要将 PiP 添加到您的应用中,您需要注册您的 Activity,根据需要将您的 Activity 切换到 PiP 模式,并确保在 Activity 处于 PiP 模式时隐藏 UI 元素并继续视频播放。
在 PiP 模式下处理您的 UI
当您进入 PiP 模式时,您的应用的所有 UI 都会进入 PiP 窗口,除非您指定您的 UI 在 PiP 模式内外应如何显示。
首先,您需要知道您的应用是否处于 PiP 模式。您可以使用 OnPictureInPictureModeChangedProvider
来实现此目的。以下代码告诉您您的应用是否处于 PiP 模式。
@Composable fun rememberIsInPipMode(): Boolean { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val activity = LocalContext.current.findActivity() var pipMode by remember { mutableStateOf(activity.isInPictureInPictureMode) } DisposableEffect(activity) { val observer = Consumer<PictureInPictureModeChangedInfo> { info -> pipMode = info.isInPictureInPictureMode } activity.addOnPictureInPictureModeChangedListener( observer ) onDispose { activity.removeOnPictureInPictureModeChangedListener(observer) } } return pipMode } else { return false } }
现在,您可以使用 rememberIsInPipMode()
来切换当应用进入 PiP 模式时显示哪些 UI 元素。
val inPipMode = rememberIsInPipMode() Column(modifier = modifier) { // This text will only show up when the app is not in PiP mode if (!inPipMode) { Text( text = "Picture in Picture", ) } VideoPlayer() }