מידע על חלונות מוטמעים

פלטפורמת Android אחראית לציור ממשק המשתמש של המערכת, כמו סרגל המצב וסרגל הניווט. ממשק המשתמש של המערכת מוצג בלי קשר לאפליקציה שבה המשתמש משתמש.

WindowInsets מספק מידע על ממשק המשתמש של המערכת כדי לוודא שהאפליקציה מציירת באזור הנכון וממשק המשתמש שלה לא מוסתר על ידי ממשק המשתמש של המערכת.

הצגת האפליקציה מקצה לקצה כדי לצייר מאחורי סרגלי המערכת
איור 1. האפליקציה נמתחת מקצה לקצה כדי לצייר מאחורי סרגלי המערכת.

ב-Android מגרסה 14 (רמת API 34) ומטה, ממשק המשתמש של האפליקציה לא מוצג מתחת לסרגלי המערכת ולחלקים החתוכים במסך כברירת מחדל.

ב-Android 15 (רמת API 35) ומעלה, האפליקציה מציירת מתחת לסרגלי המערכת ולחלקים החסרים במסך, אחרי שהאפליקציה מטרגטת ל-SDK 35. כך אפשר לספק חוויית משתמש חלקה יותר ולאפשר לאפליקציה לנצל באופן מלא את שטח החלון שזמין לה.

הצגת תוכן מאחורי ממשק המשתמש של המערכת נקראת הצגה מקצה לקצה. בדף הזה מוסבר על הסוגים השונים של insets, איך להציג את האפליקציה מקצה לקצה ואיך להשתמש בממשקי ה-API של insets כדי להנפיש את ממשק המשתמש ולוודא שרכיבים בממשק המשתמש של המערכת לא מסתירים את התוכן של האפליקציה.

יסודות השימוש ב-inset

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

הגודל של ממשק המשתמש של המערכת ומידע על המיקום שלו מצוינים באמצעות insets.

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

סוגי השוליים הפנימיים המובנים האלה של Android זמינים דרך WindowInsets:

WindowInsets.statusBars

התמונות הממוזערות שמתארות את שורות הסטטוס. אלה הסרגלים העליונים בממשק המשתמש של המערכת שמכילים סמלי התראות ואינדיקטורים אחרים.

WindowInsets.statusBarsIgnoringVisibility

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

WindowInsets.navigationBars

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

WindowInsets.navigationBarsIgnoringVisibility

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

WindowInsets.captionBar

ההוספה שמתארת את קישוט החלון של ממשק המשתמש של המערכת אם הוא בחלון חופשי, כמו סרגל הכותרת העליון.

WindowInsets.captionBarIgnoringVisibility

השוליים הפנימיים של סרגל הכתוביות כשהוא גלוי. אם סרגלי הכתוביות מוסתרים, אז השוליים של סרגל הכתוביות הראשי יהיו ריקים, אבל השוליים האלה לא יהיו ריקים.

WindowInsets.systemBars

האיחוד של שוליים פנימיים של סרגל המערכת, שכוללים את שורות הסטטוס, סרגלי הניווט וסרגל הכותרת.

WindowInsets.systemBarsIgnoringVisibility

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

WindowInsets.ime

השוליים הפנימיים שמתארים את כמות המקום בתחתית שהמקלדת הווירטואלית תופסת.

WindowInsets.imeAnimationSource

השוליים הפנימיים שמתארים את כמות המקום שהמקלדת הווירטואלית תפסה לפני האנימציה הנוכחית של המקלדת.

WindowInsets.imeAnimationTarget

ה-insets המתארים את כמות המקום שהמקלדת הווירטואלית תתפוס אחרי האנימציה הנוכחית של המקלדת.

WindowInsets.tappableElement

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

WindowInsets.tappableElementIgnoringVisibility

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

WindowInsets.systemGestures

השוליים הפנימיים שמייצגים את כמות השוליים הפנימיים שבהם המערכת תיירט תנועות לניווט. אפליקציות יכולות לציין באופן ידני טיפול בכמות מוגבלת של המחוות האלה באמצעות Modifier.systemGestureExclusion.

WindowInsets.mandatorySystemGestures

קבוצת משנה של מחוות המערכת שתמיד יטופלו על ידי המערכת, ואי אפשר לבטל את ההסכמה לשימוש בהן באמצעות Modifier.systemGestureExclusion.

WindowInsets.displayCutout

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

WindowInsets.waterfall

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

הסוגים האלה מסוכמים בשלושה סוגים של מסגרות 'בטוחות' שמוודאות שהתוכן לא מוסתר:

סוגי ה-inset ה "בטוחים" האלה מגנים על התוכן בדרכים שונות, בהתאם ל-inset של פלטפורמת הבסיס:

  • אפשר להשתמש ב-WindowInsets.safeDrawing כדי להגן על תוכן שלא אמור להיות מוצג מתחת לממשק משתמש של מערכת כלשהי. זהו השימוש הנפוץ ביותר ב-insets: למנוע ציור של תוכן שמוסתר על ידי ממשק המשתמש של המערכת (באופן חלקי או מלא).
  • אפשר להשתמש ב-WindowInsets.safeGestures כדי להגן על תוכן באמצעות תנועות. כך נמנע מצב שבו מחוות מערכת מתנגשות עם מחוות באפליקציה (כמו מחוות לגיליונות תחתונים, לקרוסלות או למשחקים).
  • כדי לוודא שאין חפיפה ויזואלית בין התוכן לבין מחוות, וגם לא חפיפה בין מחוות, אפשר להשתמש ב-WindowInsets.safeContent כשילוב של WindowInsets.safeDrawing ושל WindowInsets.safeGestures.