Vết cắt trên màn hình là một khu vực trên một số thiết bị mở rộng vào bề mặt màn hình. Điều này cho phép trải nghiệm tràn viền trong khi vẫn cung cấp không gian cho các cảm biến quan trọng ở mặt trước của thiết bị.
Android hỗ trợ vết cắt trên màn hình trên các thiết bị chạy Android 9 (cấp độ API 28) trở lên. Tuy nhiên, nhà sản xuất thiết bị cũng có thể hỗ trợ vết cắt trên màn hình cho các thiết bị chạy Android 8.1 trở xuống.
Trang này mô tả cách triển khai tính năng hỗ trợ cho các thiết bị có vết cắt trong Compose, bao gồm cả cách xử lý vùng vết cắt, tức là hình chữ nhật tràn viền trên bề mặt màn hình chứa vết cắt.
Trường hợp mặc định
Theo mặc định, các ứng dụng nhắm đến cấp độ API mục tiêu 34 trở xuống hoặc các Hoạt động không gọi enableEdgeToEdge sẽ không vẽ vào vùng vết cắt, trừ phi ứng dụng vẽ vào một thanh hệ thống chứa vết cắt trên màn hình.
Các ứng dụng nhắm đến cấp độ API mục tiêu 35 trở lên trên thiết bị chạy Android 15 trở lên hoặc các Hoạt động gọi enableEdgeToEdge sẽ vẽ vào vùng vết cắt.
Nói cách khác, LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT, LAYOUT_IN_DISPLAY_CUTOUT_MODE_SHORT_EDGES và LAYOUT_IN_DISPLAY_CUTOUT_MODE_NEVER được diễn giải là LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS cho các cửa sổ không nổi trong ứng dụng nhắm đến cấp độ API mục tiêu 35 trở lên trên thiết bị chạy Android 15 trở lên.
Xử lý thông tin về phần cắt theo cách thủ công
Bạn phải xử lý thông tin về vết cắt để ngăn vùng vết cắt che khuất văn bản, thành phần điều khiển hoặc thành phần tương tác quan trọng cần nhận dạng thao tác chạm tinh tế (độ nhạy cảm ứng có thể thấp hơn trong vùng vết cắt). Khi xử lý phần cắt, đừng cố định giá trị chiều cao của thanh trạng thái vì điều này có thể dẫn đến việc nội dung bị chồng chéo hoặc bị cắt. Thay vào đó, hãy xử lý phần cắt bằng một trong những cách sau:
Sử dụng
WindowInsets.displayCutout,WindowInsets.safeContenthoặcWindowInsets.safeDrawingTruy cập vào đối tượng
Pathcủa vết cắt bằngLocalView.current.rootWindowInsets.displayCutout
Đối với Compose, bạn nên sử dụng displayCutout, safeContent hoặc safeDrawing để xử lý các phần lồng ghép vết cắt trong thành phần kết hợp. Phương pháp này cho phép
bạn tuân thủ khoảng đệm của vết cắt trên màn hình khi cần hoặc bỏ qua khi
không cần thiết.
Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) { drawRect(Color.Red, style = Stroke(2.dp.toPx())) }
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Phần lồng ghép cửa sổ trong Compose
- Đối tượng sửa đổi đồ hoạ
- Định kiểu cho đoạn văn