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

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: ล้างโฟกัสโดยไม่มีเงื่อนไขแม้ว่าคอมโพเนนต์จะจับภาพโฟกัสไว้แล้วก็ตาม