מערכת Android מפעילה מצב תאימות לאפליקציות שמצהירות על הגבלות לגבי כיוון או שינוי גודל. מצב תאימות מבטיח התנהגות מקובלת של האפליקציה במכשירים עם מסך גדול ובטלפונים מתקפלים, אבל עם שימושיות לא אופטימלית.
החלפות ברמת האפליקציה מאפשרות ליצרני מכשירים, לבעלי מכשירים וירטואליים1 ולמשתמשים לשנות את התנהגות האפליקציה כדי לשפר את הפריסה שלה או כדי למנוע שהיא תיפגע במכשירים נבחרים.
Android 16
Android 16 (רמת API 36) מתעלמת מהגבלות על כיוון המסך, יחס הגובה-רוחב ושינוי הגודל של האפליקציה כדי לשפר את הפריסה של אפליקציות בגורמי צורה עם רוחב מינימלי של 600dp ומעלה.
ההגדרות הבאות לשינוי ברירת המחדל של כל אפליקציה לא פועלות באפליקציות שמטרגטות לרמת API 36:
- FORCE_RESIZE_APP
- FORCE_NON_RESIZE_APP
- OVERRIDE_MIN_ASPECT_RATIO
- OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
- OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
- OVERRIDE_MIN_ASPECT_RATIO_LARGE
- OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
- OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
- OVERRIDE_ANY_ORIENTATION
- OVERRIDE_ANY_ORIENTATION_TO_USER
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
- OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
- OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
- OVERRIDE_RESPECT_REQUESTED_ORIENTATION
- OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS
ביטול ההסכמה
האפליקציה יכולה להיות מיועדת לרמת API 36, אבל לא להשתמש בהתנהגות של Android 16. במקרה כזה, ההרשאה OVERRIDE_ANY_ORIENTATION_TO_USER לא רלוונטית.
הצהרה על מאפיין במניפסט
כדי לבטל את ההסכמה להתנהגות של API ברמה 36, מגדירים את מאפיין המניפסט PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY
.
כדי לבטל את ההסכמה לפעילות ספציפית, מגדירים את המאפיין ברכיב <activity>
:
<activity ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</activity>
כדי לבטל את ההסכמה לכל האפליקציה, מגדירים את המאפיין ברכיב <application>
:
<application ...>
<property
android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
android:value="true" />
...
</application>
מכשירים להתייחסות
יכול להיות שבמכשירים הבאים יהיה צורך בשינוי הגדרות לכל אפליקציה בנפרד, בגלל תצורות לא רגילות או תצורות שלא נתמכות היטב באפליקציות:
- טאבלטים: האוריינטציה הטבעית של חלק מהטאבלטים, כמו Pixel Tablet, היא לרוחב. מכשיר נמצא בכיוון הטבעי שלו כשערך ההחזרה של
Display#getRotation()
הואSurface.ROTATION_0
. אם האפליקציות מניחות ש-ROTATION_0
הוא מצב אנכי, יכול להיות שפריסות האפליקציות ותצוגת המצלמה המקדימה לא יתאימו לתצוגת המכשיר. - מכשירים מתקפלים לרוחב: חלק מהמכשירים המתקפלים, כמו Pixel Fold, נמצאים במצב אנכי כשהם מקופלים, אבל במצב אופקי כשהם פתוחים. אם האפליקציות מניחות שהכיוון כשהמסך פתוח הוא לאורך, סביר להניח שיופיעו לולאות של הבהובים או בעיות בפריסה.
- טלפונים מתקפלים: טלפונים מתקפלים פתוחים הם בדרך כלל במצב אנכי. אבל כשהטלפונים מקופלים, בדרך כלל יש להם מסך קטן במצב אופקי. האפליקציות צריכות לזהות את כיווני המסך השונים ולהתאים את עצמן אליהם.
- מסכים חיצוניים: במכשירים נבחרים אפשר להפעיל סשן של חלונות בשולחן העבודה במסכים חיצוניים ומחוברים. אפליקציות צריכות לשלוח שאילתות למסכים חיצוניים כדי לקבל מידע כמו גודל המסך והרזולוציה. אחרת, האפליקציות עלולות להניח הנחות שגויות לגבי המסכים, מה שעלול להוביל להתנהגות שגויה של האפליקציה.
- מסכים מובנים ברכב: הרבה מסכים מובנים ברכב הם לרוחב, אבל לא כולם. פיתוח אפליקציות לשימוש בזמן חנייה למסכי רכב דומה לפיתוח לטאבלטים.
בעיות תאימות נפוצות
הבעיות הנפוצות ביותר בתאימות של אפליקציות הן הגבלות על כיוון האפליקציה, הגבלות על שינוי הגודל ויחס הגובה-רוחב, טיפול שגוי בכיוון התצוגה המקדימה של המצלמה ושימוש לא נכון בממשקי API.
Letterboxing חפשו את המטמון
האפליקציה ממוקמת במרכז המסך או, במסכים גדולים, בצד אחד או בצד השני כדי לאפשר גישה נוחה. מסגרות (פסים בצבע אחיד או טפט מטושטש) ממלאות את האזור הלא מנוצל של המסך בצדדים או בחלק העליון והתחתון של האפליקציה.
הוספת פסים שחורים בצדדים קורית לעיתים קרובות במכשירים עם מסך גדול, כי המידות ויחס הגובה-רוחב של המסך במכשיר בדרך כלל שונים מאלה של טלפונים רגילים, שרוב האפליקציות מיועדות להם.
איור 1. אפליקציה שמוגבלת לכיוון לאורך מוצגת עם פסי שחורים בטאבלט ובמכשיר מתקפל בכיוון לרוחב.
בעיה
האפליקציה לא תומכת בכל הגדרות התצוגה כי הכיוון שלה קבוע, יחס הגובה-רוחב שלה קבוע או שאי אפשר לשנות את הגודל שלה.
הגדרות התצורה שקובעות את הכיוון של האפליקציה ואת האפשרות לשנות את הגודל שלה כוללות את ההגדרות הבאות:
screenOrientation
: מציין כיוון קבוע לאפליקציה. אפליקציות יכולות גם להגדיר כיוון בזמן הריצה באמצעותActivity#setRequestedOrientation()
.
resizeableActivity
: מציין אם המערכת יכולה לשנות את הגודל של האפליקציות כך שיתאימו לחלונות בגדלים שונים. ב-Android 11 (רמת API 30) ומטה, המאפיין הזה מציין אם אפליקציות תומכות במצב מרובה חלונות. ב-Android 12 (רמת API 31) ואילך, ההגדרה הזו מציינת אם אפליקציות תומכות במצב מרובה חלונות במסכים קטנים (גודל חלון קומפקטי). ב-Android בגרסה 12 ומעלה, האפליקציות תומכות במצב מרובה חלונות במסכים גדולים (גודל חלון בינוני או מורחב), ללא קשר להגדרה הזו.
maxAspectRatio
: מציין את יחס הגובה-רוחב המקסימלי שהאפליקציה תומכת בו. רק אפליקציות שהערך שלresizeableActivity
שלהן מוגדר כ-false
יכולות להגדיר אתmaxAspectRatio
.
minAspectRatio
: מציין את יחס הגובה-רוחב המינימלי שהאפליקציה תומכת בו. רק אפליקציות שבהן הערך שלresizeableActivity
מוגדר כ-false
יכולות להגדיר אתminAspectRatio
.
אי אפשר להשתמש באפליקציה שמוגבלת לשימוש בפריסה לאורך במכשיר עם פריסה לרוחב.
אופטימיזציה
האפליקציה צריכה לתמוך בכל גדלי המסך והכיוונים של מכשירים ושל