Tryb obraz w obrazie (PiP) to specjalny tryb wielookienkowy używany głównie do odtwarzania filmów. Pozwala użytkownikowi oglądać film w małym oknie przypiętym do rogu ekranu, a jednocześnie przełączać inne aplikacje lub wyszukiwać treści na głównym ekranie.
Tryb PiP korzysta z interfejsów API obsługiwanych przez wiele okien, które są dostępne w Androidzie 7.0, aby wyświetlać przypięte okno z filmem. Aby dodać tryb PiP do aplikacji, musisz zarejestrować aktywność, w razie potrzeby przełączyć ją w tryb PiP i zadbać o to, aby elementy interfejsu były ukryte, a odtwarzanie filmu było kontynuowane, gdy aktywność jest w trybie PiP.
Praca z interfejsem w trybie obrazu w płótnie
Gdy włączysz tryb obrazu w oknie, całe UI aplikacji zostanie wyświetlone w oknie obrazu w oknie, chyba że określisz, jak ma wyglądać UI w trybie obrazu w oknie i poza nim.
Najpierw musisz wiedzieć, czy aplikacja jest w trybie obrazu w obrazie. Możesz użyć OnPictureInPictureModeChangedProvider
.
Poniższy kod informuje, czy aplikacja jest w trybie 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 } }
Teraz możesz użyć rememberIsInPipMode()
, aby przełączyć, które elementy interfejsu mają być widoczne, gdy aplikacja wejdzie w tryb obrazu w obrazie:
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() }