Hình trong hình (PiP) là một loại chế độ đặc biệt dành cho nhiều cửa sổ, chủ yếu dùng để phát video. Tính năng này cho phép người dùng xem video trong một cửa sổ nhỏ được ghim vào góc màn hình trong khi di chuyển giữa các ứng dụng hoặc duyệt xem nội dung trên màn hình chính.
PiP tận dụng các API nhiều cửa sổ có trong Android 7.0 để cung cấp cửa sổ lớp phủ của video đã ghim. Để thêm PiP vào ứng dụng, bạn cần đăng ký hoạt động, chuyển hoạt động sang chế độ PiP (nếu cần) và đảm bảo ẩn các thành phần giao diện người dùng cũng như tiếp tục phát video khi hoạt động đó ở chế độ PiP.
Xử lý giao diện người dùng ở chế độ PiP
Khi bạn chuyển sang chế độ PiP, toàn bộ giao diện người dùng của ứng dụng sẽ chuyển sang cửa sổ PiP, trừ phi bạn chỉ định giao diện người dùng của mình sẽ trông như thế nào khi ở trong và ngoài chế độ PiP.
Trước tiên, bạn cần biết thời điểm ứng dụng của mình có ở chế độ PiP hay không. Bạn có thể sử dụng OnPictureInPictureModeChangedProvider
để thực hiện việc này.
Mã dưới đây cho bạn biết liệu ứng dụng của bạn có đang ở chế độ PiP hay không.
@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 } }
Giờ đây, bạn có thể sử dụng rememberIsInPipMode()
để bật/tắt các thành phần trên giao diện người dùng sẽ hiển thị khi ứng dụng chuyển sang chế độ 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() }