Pencere içinde pencere (PiP), çoğunlukla video oynatma için kullanılan özel bir çoklu pencere modudur. Bu özellik, kullanıcının uygulamalar arasında geçiş yaparken veya ana ekrandaki içeriklere göz atarken ekranın bir köşesine sabitlenmiş küçük bir pencerede video izlemesine olanak tanır.
PiP, sabitlenmiş video yer paylaşımı penceresi sağlamak için Android 7.0'da kullanıma sunulan çok pencereli API'lerden yararlanır. Uygulamanıza PiP eklemek için etkinliğinizi kaydetmeniz, gerektiğinde etkinliğinizi PiP moduna geçirmeniz ve etkinlik PiP modundayken kullanıcı arayüzü öğelerinin gizlendiğinden ve video oynatmanın devam ettiğinden emin olmanız gerekir.
使用 Jetpack 实现 PiP
使用 Jetpack 画中画库来实现画中画体验,因为它可以简化集成并减少常见的应用内问题。如需查看其使用示例,请参阅我们的平台示例应用。不过,如果您希望使用平台 API 实现 PiP,请参阅以下文档。
PiP modunda kullanıcı arayüzünüzü kullanma
PIP moduna girdiğinizde, kullanıcı arayüzünüzün PIP modunda ve PIP modu dışında nasıl görünmesi gerektiğini belirtmediğiniz sürece uygulamanızın kullanıcı arayüzünün tamamı PIP penceresine girer.
Öncelikle uygulamanızın PiP modunda olup olmadığını bilmeniz gerekir. Bunu yapmak için OnPictureInPictureModeChangedProvider ürününü kullanabilirsiniz.
Aşağıdaki kod, uygulamanızın PiP modunda olup olmadığını gösterir.
@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 } }
Artık rememberIsInPipMode() simgesini kullanarak uygulama PiP moduna girdiğinde hangi kullanıcı arayüzü öğelerinin gösterileceğini değiştirebilirsiniz:
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() }