ย้ายและล้างโฟกัส

FocusManager ช่วยให้คุณย้ายโฟกัสตามทิศทางหรือล้างโฟกัสทั้งหมดได้ ใช้ FocusRequester สำหรับการกำหนดเป้าหมายคอมโพเนนต์โดยตรง (ดูขอโฟกัสแบบเป็นโปรแกรม)

การเคลื่อนไหวของโฟกัสตามทิศทางด้วย FocusManager

วิธีย้ายโฟกัสแบบเป็นโปรแกรมในทิศทางที่สัมพันธ์กัน

  1. รับอินสแตนซ์ FocusManager โดยใช้ LocalFocusManager.current
  2. เรียกใช้ moveFocus() ด้วยค่า FocusDirection (Next, Previous, Up, Down, Left, Right, Enter หรือ Exit)

val focusManager = LocalFocusManager.current

Button(
    onClick = {
        focusManager.moveFocus(FocusDirection.Next)
    }
) {
    Text("Next Field")
}

ล้างโฟกัส

หากต้องการนำโฟกัสออกจากองค์ประกอบที่โฟกัสอยู่ (เช่น เมื่อผู้ใช้กดแป้น Esc) ให้เรียกใช้ clearFocus():

val focusManager = LocalFocusManager.current

Box(
    modifier = Modifier.onPreviewKeyEvent { keyEvent ->
        if (keyEvent.key == Key.Escape && keyEvent.type == KeyEventType.KeyUp) {
            focusManager.clearFocus()
            true
        } else {
            false
        }
    }
)

ฟังก์ชัน clearFocus() ยอมรับพารามิเตอร์ force: Boolean = false ที่ไม่บังคับ ดังนี้

  • force = false (ค่าเริ่มต้น): เคารพการล็อกโฟกัสและจะไม่ล้างโฟกัสหากคอมโพเนนต์ที่ใช้งานอยู่จับโฟกัส
  • force = true: ล้างโฟกัสโดยไม่มีเงื่อนไขแม้ว่าคอมโพเนนต์จะจับโฟกัสไว้ก็ตาม