בקשת מיקוד באופן פרוגרמטי

במסלולי משתמשים מסוימים, האפליקציה צריכה להעביר את המיקוד באופן מפורש לרכיב ספציפי. לדוגמה, כשמשתמש לוחץ על לחצן 'חיפוש', יכול להיות שתרצו להעביר את המיקוד באופן אוטומטי לשדה להזנת קלט של החיפוש.

שימוש ב-FocusRequester

כדי לבקש מיקוד באופן מפורש:

  1. יוצרים מופע של FocusRequester וזוכרים אותו: val focusRequester = remember { FocusRequester() }.
  2. מצרפים את FocusRequester לרכיב הקומפוזבילי של היעד באמצעות משנה המאפיינים focusRequester.
  3. מתקשרים אל requestFocus() בתוך קריאה חוזרת (callback) של אירוע (כמו onClick) או בתוך היקף של קורוטינה.

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

val focusRequester = remember { FocusRequester() }
var text by remember { mutableStateOf("") }

TextField(
    value = text,
    onValueChange = { text = it },
    modifier = Modifier.focusRequester(focusRequester)
)

Button(onClick = { focusRequester.requestFocus() }) {
    Text("Request focus on TextField")
}

הגדרת המיקוד במסך הראשוני

כדי להעביר את המיקוד הראשוני לרכיב ספציפי כשמסך מופיע בפעם הראשונה, צריך להפעיל את requestFocus() בתוך LaunchedEffect(Unit):

LaunchedEffect(Unit) {
    focusRequester.requestFocus()
}

כשעוברים בין מאגרי תגים או חוזרים ממסך אחר, אפשר גם לצרף focusRestorer() למאגרי תגים ראשיים כדי להחזיר את המיקוד באופן אוטומטי לצאצא האחרון שהיה במיקוד. מידע נוסף זמין במדריך החזרת המיקוד.