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 ile PiP'yi uygulama
Entegrasyonu kolaylaştırdığı ve yaygın uygulama içi sorunları azalttığı için Jetpack pencere içinde pencere kitaplığını kullanarak pencere içinde pencere deneyimini uygulayın. Kullanım örneği için platform örnek uygulamamıza bakın. Ancak, platform API'lerini kullanarak PiP'yi uygulamayı tercih ederseniz aşağıdaki belgelere bakın.
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() }