Chế độ hình trong hình (PiP) là một loại chế độ nhiều cửa sổ đặc biệt, 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 đi 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.
Triển khai chế độ PiP bằng Jetpack
Sử dụng thư viện Hình trong hình của Jetpack để triển khai trải nghiệm hình trong hình vì thư viện này giúp đơn giản hoá quá trình tích hợp và giảm các vấn đề thường gặp trong ứng dụng. Hãy tham khảo ứng dụng mẫu nền tảng của chúng tôi để xem ví dụ về cách sử dụng. Tuy nhiên, nếu bạn muốn triển khai chế độ PiP bằng API nền tảng, hãy tham khảo tài liệu sau.
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 sẽ xuất hiện như thế nào 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 ở chế độ PiP hay không. Bạn có thể dùng OnPictureInPictureModeChangedProvider để thực hiện việc này.
Đoạn mã dưới đây cho 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ể dùng rememberIsInPipMode() để bật/tắt những phần tử giao diện người dùng cần hiện 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() }