בדרך כלל, משתמשים מקיימים אינטראקציה עם האפליקציה שלכם באמצעות הקשה על רכיבים במסך. עם זאת, זו לא האינטראקציה היחידה. דוגמאות נוספות לאינטראקציות:
- משתמש ב-ChromeOS יכול להשתמש במקשי החיצים במקלדת הפיזית כדי לנווט במסך.
- מישהו שמשחק במשחק יכול להשתמש בבקר המשחק המחובר כדי לנווט בתפריט של המשחק.
- משתמש באפליקציה לנייד יכול לעבור בין אלמנטים באמצעות המקלדת הווירטואלית.
במקרים כאלה, חשוב לעקוב אחרי הרכיב הפעיל בכל נקודת זמן. זה מה שאנחנו מכנים מיקוד. המיקוד ברכיבים במסך צריך להיות בסדר הגיוני. ל-Jetpack Compose יש דרך ברירת מחדל לטיפול במיקוד, והיא נכונה ברוב המקרים. עם זאת, במקרים מסוימים, יכול להיות שתצטרכו לשנות את התנהגות ברירת המחדל הזו.
בדפים הבאים מוסבר איך להשתמש במיקוד באפליקציה:
- שינוי סדר ההעברה של המיקוד: במאמר הזה מוסבר איך לשנות את סדר המיקוד שמוגדר כברירת מחדל, להוסיף קבוצות מיקוד ולהשבית את המיקוד של רכיב שאפשר להרכיב.
- שינוי התנהגות המיקוד: במאמר הזה מוסבר איך לבקש מיקוד, לתפוס אותו ולשחרר אותו, ואיך להפנות את המיקוד כשנכנסים למסך.
- תגובה למיקוד: הסבר על תגובה לשינויים במיקוד, הוספת רמזים חזותיים לרכיבים והבנת מצב המיקוד של רכיב.
סדר ברירת המחדל של מעבר בין רכיבים
לפני שנצלול להתנהגות ברירת המחדל של חיפוש המיקוד, חשוב להבין את המושג רמה בהיררכיה: באופן כללי, אפשר לומר ששני Composables נמצאים באותה רמה אם הם אחים, כלומר יש להם את אותם הורים. לדוגמה, אלמנטים בתוך Column נמצאים באותה רמה. לעבור לרמה גבוהה יותר פירושו לעבור מפריט צאצא אל Composable
ההורה שלו, או, אם נשתמש באותו דוגמה, לחזור מפריט אל Column שמכיל אותו. המעבר לרמה נמוכה יותר הוא בכיוון ההפוך, מColumn
הפריט ההורה לפריטים שכלולים בו. אפשר להשתמש במושג הזה בכל Composable
שיכול להכיל Composables אחרים.
יש כמה דרכים לנווט בממשק המשתמש, וחלקן מוכרות לרוב המשתמשים:
- TAB: ניווט חד-ממדי, קדימה או אחורה. הניווט באמצעות מקש Tab מעביר את המיקוד לרכיב הבא או הקודם בהיררכיה. כברירת מחדל, בכלי הכתיבה מוצגת ההצהרה בנושא
Composables. אפשר להשיג ניווט חד-כיווני באמצעות המקשtabבמקלדת או באמצעות המסגרת המסתובבת בשעון, ובחיפוש מיקוד כזה כל רכיב במסך יסומן. - מקשי החיצים: ניווט דו-ממדי, שמאלה, ימינה, למעלה או למטה. אפשר לנווט דו-ממדי באמצעות מקשי החיצים במקלדת או מקשי הניווט בטלוויזיה, וסדר המעבר בין הרכיבים מאפשר להגיע רק לרכיבים ברמה מסוימת. אפשר להשתמש בכפתור המרכזי של ה-D-Pad ובכפתור 'הקודם' כדי לרדת ולעלות לרמה אחרת.
לדוגמה, בצילום המסך שלמטה יש ארבעה לחצנים, אחד מתחת לשני, ואתם רוצים לעבור ביניהם לפי סדר ההופעה שלהם.
התנהגות כזו מובנית ב-Jetpack Compose: ערכת הכלים מאפשרת לעבור בין כל הפונקציות הניתנות להרכבה בסדר אנכי מלמעלה למטה באמצעות המקש tab, או להעביר את המיקוד באמצעות מקשי החיצים למעלה או למטה.
כשעוברים לסוג אחר של פריסה, יש כמה שינויים. אם הפריסה שלכם כוללת יותר מעמודה אחת, כמו הפריסה שמוצגת בהמשך, Jetpack Compose מאפשרת לכם לנווט בין העמודות בלי להוסיף קוד. אם לוחצים על המקש tab, Jetpack Compose מדגיש אוטומטית את הפריטים לפי סדר ההצהרה, מהראשון ועד הרביעי. שימוש במקשי החיצים במקלדת גורם לבחירה לנוע בכיוון הרצוי במרחב דו-ממדי.
Column { Row { TextButton({ }) { Text("First field") } TextButton({ }) { Text("Second field") } } Row { TextButton({ }) { Text("Third field") } TextButton({ }) { Text("Fourth field") } } }
ה-Composables מוצהרים בשני Rows, ורכיבי המיקוד מוצהרים לפי הסדר, מהראשון עד הרביעי. כשלוחצים על המקש tab, סדר המיקוד הוא כזה:
בקטע הקוד שבהמשך, הפריטים מוצהרים ב-Columns ולא ב-Rows:
Row { Column { TextButton({ }) { Text("First field") } TextButton({ }) { Text("Second field") } } Column { TextButton({ }) { Text("Third field") } TextButton({ }) { Text("Fourth field") } } }
בפריסה הזו הפריטים מוצגים אנכית, מלמעלה למטה, מתחילת המסך ועד הסוף:
שני הדוגמאות הקודמות, למרות שהן שונות בניווט חד-כיווני, מספקות את אותה חוויה כשמדובר בניווט דו-ממדי. בדרך כלל זה קורה כי הפריטים במסך ממוקמים באותו מיקום גיאוגרפי בשני המקרים. אם עוברים ימינה מהColumn הראשון, המיקוד עובר לשני. אם עוברים למטה מהRow הראשון, המיקוד עובר לזה שמתחתיו.
מומלץ בשבילך
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- שינוי התנהגות המיקוד
- ConstraintLayout ב-Compose
- פריסות של Flow בפיתוח נייטיב