בכל פעם שהמיקוד משתנה בעץ הקומפוזיציה, Compose מפעיל אירוע מיקוד שמשתני הורה וצאצא יכולים לראות. אפשר להשתמש במשתנה onFocusChanged כדי להאזין למעברים בין מצבי מיקוד, לשלוח שאילתות לגבי מאפייני המיקוד הנוכחיים ולהפעיל עדכונים בממשק המשתמש שמונעים על ידי מצבים.
צפייה במצב המיקוד באמצעות onFocusChanged
המשתנה onFocusChanged מספק אובייקט FocusState בכל פעם שרכיב מקבל או מאבד את המיקוד.
לדוגמה, אפשר לעקוב אחרי שינויים במיקוד כדי לעדכן את המצב של רכיב בהתאמה אישית (כמו שינוי צבע הגבול של רכיב או הפעלת אנימציה):
var color by remember { mutableStateOf(Color.White) } Card( modifier = Modifier .onFocusChanged { color = if (it.isFocused) Red else White } .border(5.dp, color) ) {}
בדוגמה הזו, remember מאחסן את צבע הגבול בין הרכבות מחדש, וצבע הגבול מתעדכן בכל פעם שמצב המיקוד של הרכיב משתנה.
מאפייני FocusState
האובייקט FocusState שמועבר אל onFocusChanged מספק שלושה מאפיינים עיקריים:
isFocused: מחזירה את הערךtrueאם הפונקציה הקומפוזבילית הספציפית שאליה משויך ה-modifier הזה נמצאת כרגע במיקוד קלט פעיל.-
hasFocus: מחזירה את הערךtrueאם הרכיב ה-composable הזה או אחד מהרכיבים ה-composable הצאצאים שלו נמצאים כרגע במיקוד. זה שימושי למכלים הורים (כמו כרטיסים או סרגלי כלים) שצריכים לדעת מתי אחד מהילדים שלהם פעיל. -
isCaptured: הפונקציה מחזירה את הערךtrueאם המיקוד נעול כרגע על הרכיב (לדוגמה, במהלך אינטראקציות משנה מודאליות באמצעותcaptureFocus()). בזמן שהמיקוד נעול, ניסיון להעביר את המיקוד לרכיבים אחרים לא מבטל את המיקוד.
Modifier.onFocusChanged { focusState ->
val isFocused = focusState.isFocused
val hasFocus = focusState.hasFocus
val isCaptured = focusState.isCaptured
}
מומלץ עבורך
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- יעדי מיקוד
- ציון מצב התמקדות במודעה
- בקשת מיקוד באופן פרוגרמטי
- התמקדות ושחרור המיקוד