חור במסך הוא אזור במכשירים מסוימים שמשתלב במשטח המסך. הוא מאפשר חוויה מקצה לקצה תוך שמירה על מקום לחיישנים חשובים בחזית המכשיר.
מערכת Android תומכת בחלקים חתוכים במסך במכשירים עם Android מגרסה 9 (רמת API 28) ואילך. עם זאת, יצרני המכשירים יכולים גם לתמוך בחלקים חתוכים במסך במכשירים עם Android מגרסה 8.1 ומטה.
בדף הזה מוסבר איך להטמיע תמיכה במכשירים עם חתכים ב-Compose, כולל איך לעבוד עם אזור החתך – כלומר, הריבוע שמשמש כמסך מלא ומכיל את החתך.
ברירת המחדל
כברירת מחדל, חתכים במסך נכללים במידע על החלק הפנימי של החלון. לכן, האפליקציה לא תצייר את האזורים של חריצי המסך אם תפעלו לפי המדריך להצגת האפליקציה מקצה לקצה.
לדוגמה, כשמשתמשים ב-Modifier.windowInsetsPadding(WindowInsets.safeContent)
או ב-Modifier.windowInsetsPadding(WindowInsets.safeDrawing)
, האפליקציה לא תצייר באופן אוטומטי באזורים שבהם ממוקם חתך.
גם WindowInsets.safeContent
וגם WindowInsets.safeDrawing
מכילים מידע על חתך המסך, והם לא יתארכו באזור שבו יש חתך במכשיר.
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) WindowCompat.setDecorFitsSystemWindows(window, false) setContent { Box(Modifier.windowInsetsPadding(WindowInsets.safeContent)) { // Any composable inside here will avoid drawing behind cutouts } } }
כדי להתאים אישית את ההתנהגות הזו, צריך לטפל בעצמכם בנתוני החיתוך.
טיפול ידני בפרטי החיתוך
אפשר לטפל בחלקים חתוכים באחת מהדרכים הבאות:
שימוש ב-
WindowInsets.displayCutout
הגדרה במניפסט העיצוב באמצעות
android:windowLayoutInDisplayCutoutMode
הגדרה פרוגרמטית של האפשרות ב-
Window
באמצעותwindow.attributes.layoutInDisplayCutoutMode
גישה לאובייקט החיתוך
Path
באמצעותLocalView.current.rootWindowInsets.displayCutout
ב-Compose, מומלץ להגדיר את windowLayoutInDisplayCutoutMode
לערך default
בעיצוב הכולל, ואז להשתמש ב-WindowInsets.displayCutout
כדי לטפל בהוספות ברכיבי ה-Compose:
Canvas(modifier = Modifier.fillMaxSize().windowInsetsPadding(WindowInsets.displayCutout)) { drawRect(Color.Red, style = Stroke(2.dp.toPx())) }
הגישה הזו מאפשרת לכם לשמור על הרווח displayCutout
במקרים שבהם הוא נדרש, או להתעלם ממנו במקרים שבהם הוא לא נדרש.
לחלופין, אפשר להחיל את אותן הגדרות שמתוארות במסמכי העזרה בנושא חתימת חלון. לשם כך, מגדירים את נושא הפעילות android:windowLayoutInDisplayCutoutMode
לאפשרות אחרת או את מאפיין החלון באמצעות window.attributes.layoutInDisplayCutoutMode =
LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT
. עם זאת, מצב החיתוך יחול על כל הפעילות, ולא ניתן יהיה לשלוט בו בנפרד לכל רכיב מורכב.
כדי לשמור על יחס גובה-רוחב של 1:1 ברכיבים מסוימים של Composables, אבל לא באחרים, צריך להשתמש ב-WindowInset.displayCutout
. ה-API הזה מאפשר לכם לגשת למידע על החתך כשצריך.
שיטות מומלצות
כשעובדים עם חתכים במסך, חשוב לזכור את הדברים הבאים:
- חשוב לשים לב למיקום של רכיבים קריטיים בממשק המשתמש. חשוב לוודא שאזור החיתוך לא מסתיר טקסט, פקדים או מידע חשוב אחר.
- אין להציב או להרחיב אלמנטים אינטראקטיביים שדורשים זיהוי מגע עדין באזור החתוך. יכול להיות שרגישות המגע תהיה נמוכה יותר באזור החור.
- כשפועלים לפי ההנחיות לגבי תמונות מקצה לקצה, פרטי החיתוך נכללים בתמונות הממוזערות
safeDrawing
/safeContent
. - כשהדבר אפשרי, כדאי להשתמש ב-
Modifier.windowInsetsPadding(WindowInsets.safeDrawing)
כדי לקבוע את ההגדרה המתאימה של הרווח מסביב לתוכן. מומלץ להימנע מקידוד קבוע של גובה שורת המצב, כי זה עלול לגרום לתוכן חופף או חתוך.
בדיקת האופן שבו התוכן מוצג עם פריימים חתוכים
חשוב לבדוק את כל המסכים והחוויות של האפליקציה. אם אפשר, כדאי לבדוק במכשירים עם סוגים שונים של חתכים. אם אין לכם מכשיר עם חור במסך, תוכלו לדמות הגדרות נפוצות של חור במסך בכל מכשיר או באמולטור עם Android מגרסה 9 ואילך. לשם כך:
- מפעילים את אפשרויות למפתחים.
- במסך אפשרויות למפתחים, גוללים למטה לקטע Drawing ובוחרים באפשרות Simulate a display with a cutout.
- בוחרים את סוג החיתוך.
מומלץ עבורך
- הערה: טקסט הקישור מוצג כש-JavaScript מושבת
- הוספת חלונות משנה ב-Compose
- מפעילי גרפיקה
- עיצוב פסקה