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

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

שימוש ב-FocusRequester

כדי לבקש במפורש להתמקד:

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

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() לקונטיינרים הורים כדי להחזיר את המיקוד באופן אוטומטי לצאצא האחרון שהיה במיקוד. מידע נוסף זמין במדריך החזרת המיקוד.