เปลี่ยนลำดับการส่งผ่านโฟกัส

ส่วนลำดับการส่งผ่านโฟกัสเริ่มต้นอธิบายวิธีการเขียน จะเพิ่มพฤติกรรมการส่งผ่านโฟกัสไปยังองค์ประกอบโดยอัตโนมัติสำหรับทั้ง การไปยังส่วนต่างๆ แบบมิติเดียว (แป้น tab) และแบบ 2 มิติ (แป้นลูกศร) ในบางส่วน คุณอาจจำเป็นต้องลบล้างการทำงานเริ่มต้นนี้และระบุให้เจาะจงมากขึ้น เกี่ยวกับลำดับการส่งผ่านที่จำเป็น

ลบล้างลำดับการส่งผ่านแบบหนึ่งมิติ

ในการเปลี่ยนลำดับการส่งผ่านโฟกัสเริ่มต้นสำหรับการนำทางแบบหนึ่งมิติ คุณสามารถ สร้างชุดการอ้างอิง 1 ชุดสำหรับ Composable ที่โฟกัสได้แต่ละรายการ:

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

จากนั้นใช้ตัวแก้ไข focusRequester เพื่อเชื่อมโยงแต่ละรายการกับ Composable:

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") }
    }
}

ตอนนี้คุณสามารถใช้ตัวแก้ไข focusProperties เพื่อระบุลำดับการส่งผ่านที่กำหนดเองได้แล้ว ดังนี้

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")
        }
    }
}

ลบล้างลำดับการส่งผ่านแบบ 2 มิติ

สามารถเพิ่มการควบคุมแบบละเอียดสำหรับลำดับการส่งผ่านโฟกัสได้ด้วย สำหรับการนำทางแบบ 2 มิติด้วยปุ่มลูกศร คุณสามารถดำเนินการต่อไปนี้สำหรับแต่ละองค์ประกอบ ลบล้างปลายทางการนำทางเริ่มต้นสำหรับแต่ละเส้นทางด้วยการเพิ่ม ตัวแก้ไข focusProperties และระบุรายการที่ระบบจะแสดง ขาลง หรือทิศทางอื่นๆ:

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

เทคนิคนี้ไม่เพียงใช้ลูกศรบนแป้นพิมพ์มีประสิทธิภาพเท่านั้น แต่ยังใช้ได้กับ D-Pads และติดบนตัวควบคุมแบบใช้สายและไร้สาย