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

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

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

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

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

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

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

יסודות ההטמעה

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

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

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

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

WindowInsets.statusBars

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

WindowInsets.statusBarsIgnoringVisibility

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

WindowInsets.navigationBars

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

WindowInsets.navigationBarsIgnoringVisibility

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

WindowInsets.captionBar

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

WindowInsets.captionBarIgnoringVisibility

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

WindowInsets.systemBars

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

WindowInsets.systemBarsIgnoringVisibility

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

WindowInsets.ime

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

WindowInsets.imeAnimationSource

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

WindowInsets.imeAnimationTarget

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

WindowInsets.tappableElement

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

WindowInsets.tappableElementIgnoringVisibility

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

WindowInsets.systemGestures

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

WindowInsets.mandatorySystemGestures

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

WindowInsets.displayCutout

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

WindowInsets.waterfall

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

הסוגים האלה מסוכמים בשלושה סוגים של הוספת תמונות שמוודאים שהתוכן לא מוסתר:

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

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