Informazioni su Picture in picture (PiP)
Mantieni tutto organizzato con le raccolte
Salva e classifica i contenuti in base alle tue preferenze.
La modalità Picture in picture (PIP) è un tipo speciale di modalità multi-finestra utilizzata principalmente per la riproduzione di video. Consente all'utente di guardare un video in una piccola finestra bloccata in un angolo dello schermo mentre naviga tra le app o sfoglia i contenuti nella schermata principale.
La modalità PIP sfrutta le API multi-finestra rese disponibili in Android 7.0 per fornire la finestra di overlay del video bloccata. Per aggiungere la modalità PiP alla tua app, devi registrare la tua attività, impostarla in modalità PiP in base alle esigenze e assicurarti che gli elementi dell'interfaccia utente siano nascosti e che la riproduzione del video continui quando l'attività è in modalità PiP.
Gestire l'interfaccia utente in modalità PiP
Quando entri in modalità PiP, l'intera UI dell'app viene visualizzata nella finestra PiP, a meno che non specifichi come deve apparire l'UI in modalità PiP e fuori.
Innanzitutto, devi sapere se la tua app è in modalità PiP o meno. Per farlo, puoi utilizzare
OnPictureInPictureModeChangedProvider
.
Il codice riportato di seguito indica se la tua app è in modalità 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
}
}
Ora puoi usare rememberIsInPipMode()
per attivare/disattivare gli elementi dell'interfaccia utente da mostrare quando l'app entra in modalità PiP:
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()
}
I campioni di contenuti e codice in questa pagina sono soggetti alle licenze descritte nella Licenza per i contenuti. Java e OpenJDK sono marchi o marchi registrati di Oracle e/o delle sue società consociate.
Ultimo aggiornamento 2025-08-23 UTC.
[[["Facile da capire","easyToUnderstand","thumb-up"],["Il problema è stato risolto","solvedMyProblem","thumb-up"],["Altra","otherUp","thumb-up"]],[["Mancano le informazioni di cui ho bisogno","missingTheInformationINeed","thumb-down"],["Troppo complicato/troppi passaggi","tooComplicatedTooManySteps","thumb-down"],["Obsoleti","outOfDate","thumb-down"],["Problema di traduzione","translationIssue","thumb-down"],["Problema relativo a esempi/codice","samplesCodeIssue","thumb-down"],["Altra","otherDown","thumb-down"]],["Ultimo aggiornamento 2025-08-23 UTC."],[],[],null,["Picture-in-picture (PiP) is a special type of multi-window mode mostly used for\nvideo playback. It lets the user watch a video in a small window pinned to a\ncorner of the screen while navigating between apps or browsing content on the\nmain screen.\n\nPiP leverages the multi-window APIs made available in Android 7.0 to provide the\npinned video overlay window. To add PiP to your app, you need to register your\nactivity, switch your activity to PiP mode as needed, and make sure UI elements\nare hidden and video playback continues when the activity is in PiP mode.\n\nHandle your UI in PiP mode\n\nWhen you enter PiP mode, your app's entire UI enters the PiP window unless you\nspecify how your UI should look in and out of PiP mode.\n\nFirst, you need to know when your app is in PiP mode or not. You can use\n[`OnPictureInPictureModeChangedProvider`](/reference/androidx/core/app/OnPictureInPictureModeChangedProvider) to achieve this.\nThe code below tells you if your app is in PiP mode.\n\n\n```kotlin\n@Composable\nfun rememberIsInPipMode(): Boolean {\n if (Build.VERSION.SDK_INT \u003e= Build.VERSION_CODES.O) {\n val activity = LocalContext.current.findActivity()\n var pipMode by remember { mutableStateOf(activity.isInPictureInPictureMode) }\n DisposableEffect(activity) {\n val observer = Consumer\u003cPictureInPictureModeChangedInfo\u003e { info -\u003e\n pipMode = info.isInPictureInPictureMode\n }\n activity.addOnPictureInPictureModeChangedListener(\n observer\n )\n onDispose { activity.removeOnPictureInPictureModeChangedListener(observer) }\n }\n return pipMode\n } else {\n return false\n }\n}https://github.com/android/snippets/blob/7a0ebbee11495f628cf9d574f6b6069c2867232a/compose/snippets/src/main/java/com/example/compose/snippets/pictureinpicture/PictureInPictureSnippets.kt#L119-L137\n```\n\n\u003cbr /\u003e\n\nNow, you can use `rememberIsInPipMode()` to toggle which UI elements to show\nwhen the app enters PiP mode:\n\n\n```kotlin\nval inPipMode = rememberIsInPipMode()\n\nColumn(modifier = modifier) {\n // This text will only show up when the app is not in PiP mode\n if (!inPipMode) {\n Text(\n text = \"Picture in Picture\",\n )\n }\n VideoPlayer()\n}https://github.com/android/snippets/blob/7a0ebbee11495f628cf9d574f6b6069c2867232a/compose/snippets/src/main/java/com/example/compose/snippets/pictureinpicture/PictureInPictureSnippets.kt#L152-L162\n```\n\n\u003cbr /\u003e"]]