Thay đổi thứ tự duyệt qua tiêu điểm

Phần Thứ tự truyền tải tiêu điểm mặc định đã mô tả cách Compose tự động thêm hành vi truyền tải tiêu điểm vào các phần tử của bạn, cho cả hai điều hướng một chiều (phím tab) và hai chiều (các phím mũi tên). Trong một số trong các trường hợp khác, bạn có thể cần phải ghi đè hành vi mặc định này và về thứ tự duyệt qua bắt buộc.

Ghi đè thứ tự truyền tải một chiều

Để thay đổi thứ tự truyền tải tiêu điểm mặc định cho điều hướng một chiều, bạn tạo một tập hợp các tệp tham chiếu, mỗi tệp tham chiếu cho một thành phần kết hợp có thể làm tâm điểm:

val (first, second, third, fourth) = remember { FocusRequester.createRefs() }

Sau đó, hãy sử dụng đối tượng sửa đổi focusRequester để liên kết từng đối tượng với một thành phần kết hợp:

Column {
    Row {
        TextButton({}, Modifier.focusRequester(first)) { Text("First field") }
        TextButton({}, Modifier.focusRequester(third)) { Text("Third field") }
    }

    Row {
        TextButton({}, Modifier.focusRequester(second)) { Text("Second field") }
        TextButton({}, Modifier.focusRequester(fourth)) { Text("Fourth field") }
    }
}

Giờ đây, bạn có thể sử dụng đối tượng sửa đổi focusProperties để chỉ định thứ tự duyệt qua tuỳ chỉnh:

Column {
    Row {
        TextButton(
            {},
            Modifier
                .focusRequester(first)
                .focusProperties { next = second }
        ) {
            Text("First field")
        }
        TextButton(
            {},
            Modifier
                .focusRequester(third)
                .focusProperties { next = fourth }
        ) {
            Text("Third field")
        }
    }

    Row {
        TextButton(
            {},
            Modifier
                .focusRequester(second)
                .focusProperties { next = third }
        ) {
            Text("Second field")
        }
        TextButton(
            {},
            Modifier
                .focusRequester(fourth)
                .focusProperties { next = first }
        ) {
            Text("Fourth field")
        }
    }
}

Ghi đè thứ tự truyền tải hai chiều

Bạn cũng có thể thêm quyền kiểm soát chi tiết đối với thứ tự truyền tải tiêu điểm để điều hướng hai chiều bằng các phím mũi tên. Đối với mỗi phần tử, bạn có thể ghi đè đích điều hướng mặc định cho mỗi chỉ đường bằng cách thêm đối tượng sửa đổi focusProperties và chỉ định mục sẽ xuất hiện, hoặc hướng bất kỳ nào khác:

TextButton(
    onClick = {},
    modifier = Modifier
        .focusRequester(fourth)
        .focusProperties {
            down = third
            right = second
        }
) {}

Kỹ thuật này không chỉ sử dụng hiệu quả mũi tên trên bàn phím mà còn hoạt động với Miếng đệm D-pad và gậy điều khiển trên bộ điều khiển có dây và không dây.