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

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