העברה וביטול המיקוד

‫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: מנקה את המיקוד ללא תנאי, גם אם רכיב מסוים תפס את המיקוד.