Mỗi khi tiêu điểm thay đổi trên cây thành phần, Compose sẽ kích hoạt một sự kiện tiêu điểm mà đối tượng sửa đổi mẹ và con có thể quan sát. Bạn có thể dùng đối tượng sửa đổi onFocusChanged để theo dõi các quá trình chuyển đổi trạng thái tiêu điểm, truy vấn các thuộc tính tiêu điểm hiện tại và kích hoạt các bản cập nhật giao diện người dùng dựa trên trạng thái.
Theo dõi trạng thái tiêu điểm bằng onFocusChanged
Đối tượng sửa đổi onFocusChanged cung cấp một đối tượng FocusState bất cứ khi nào một phần tử nhận hoặc mất tiêu điểm.
Ví dụ: bạn có thể theo dõi các thay đổi về tiêu điểm để cập nhật trạng thái thành phần tuỳ chỉnh (chẳng hạn như thay đổi màu đường viền của một phần tử hoặc kích hoạt một ảnh động):
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
Trong ví dụ này, remember lưu trữ màu viền trong các thành phần kết hợp lại và màu viền sẽ cập nhật bất cứ khi nào trạng thái tiêu điểm của phần tử chuyển đổi.
Thuộc tính FocusState
Đối tượng FocusState được truyền đến onFocusChanged cung cấp 3 thuộc tính chính:
isFocused: Trả vềtruenếu thành phần kết hợp cụ thể mà đối tượng sửa đổi này được đính kèm hiện đang giữ tiêu điểm đầu vào đang hoạt động.hasFocus: Trả vềtruenếu thành phần kết hợp này hoặc bất kỳ thành phần kết hợp con nào của thành phần kết hợp này hiện có tiêu điểm. Điều này hữu ích cho các vùng chứa mẹ (chẳng hạn như thẻ hoặc thanh công cụ) cần biết thời điểm có bất kỳ thành phần con nào trong đó đang hoạt động.isCaptured: Trả vềtruenếu tiêu điểm hiện bị khoá vào phần tử (ví dụ: trong các hoạt động phụ phương thức bằngcaptureFocus()). Trong khi được ghi lại, việc cố gắng di chuyển tiêu điểm đến các phần tử khác sẽ không xoá tiêu điểm.
Modifier.onFocusChanged { focusState ->
val isFocused = focusState.isFocused
val hasFocus = focusState.hasFocus
val isCaptured = focusState.isCaptured
}
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Mục tiêu lấy tiêu điểm
- Chỉ báo trạng thái tập trung
- Yêu cầu lấy tiêu điểm theo phương thức lập trình
- Nắm bắt và giải phóng tiêu điểm