Yêu cầu lấy tiêu điểm theo phương thức lập trình

Trong một số quy trình người dùng, ứng dụng của bạn cần di chuyển tiêu điểm một cách rõ ràng đến một thành phần cụ thể. Ví dụ: khi người dùng nhấp vào nút "Tìm kiếm", bạn có thể muốn tự động đặt tiêu điểm vào trường nhập dữ liệu tìm kiếm.

Sử dụng FocusRequester

Cách yêu cầu rõ ràng tiêu điểm:

  1. Tạo và ghi nhớ một thực thể FocusRequester: val focusRequester = remember { FocusRequester() }.
  2. Gắn FocusRequester vào thành phần kết hợp đích bằng đối tượng sửa đổi focusRequester.
  3. Gọi requestFocus() bên trong một lệnh gọi lại sự kiện (chẳng hạn như onClick) hoặc một phạm vi đồng thời.

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

Button(onClick = { focusRequester.requestFocus() }) {
    Text("Request focus on TextField")
}

Đặt tiêu điểm ban đầu trên màn hình

Để đặt tiêu điểm ban đầu vào một thành phần cụ thể khi màn hình xuất hiện lần đầu, hãy kích hoạt requestFocus() bên trong LaunchedEffect(Unit):

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

Khi di chuyển giữa các vùng chứa hoặc quay lại từ một màn hình khác, bạn cũng có thể đính kèm focusRestorer() vào các vùng chứa mẹ để tự động trả lại tiêu điểm cho phần tử con được lấy tiêu điểm gần đây nhất. Để biết thêm thông tin, hãy xem hướng dẫn Khôi phục tiêu điểm.