מערכת 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
.

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

האפליקציה תומכת בכל כיווני המכשיר.
פתרון עקיף לבעיות תאימות
אם אפליקציה עם אוריינטציה קבועה או יחס רוחב-גובה קבוע פועלת בחלון שבו האפליקציה לא תומכת ישירות בגודל או באוריינטציה של החלון, מערכת Android מוסיפה לאפליקציה פסי שוליים כדי לשמור על רציפות.
החל מ-Android 12 (רמת API 31) ועד ל-12L (רמת API 32), הפלטפורמה מחילה מגוון שיפורים על אפליקציות עם תיבת מכתבים. יצרני המכשירים מטמיעים את השיפורים בממשק המשתמש. לא צריך לבצע פיתוח נוסף באפליקציה כדי ליהנות מהשיפורים.
Android 12 (API ברמה 31) כוללת את השיפורים האסתטיים הבאים, שיצרני המכשירים יכולים להגדיר:
- פינות מעוגלות: הפינות של חלון האפליקציה נראות מעודנות יותר.
- שקיפות של סרגל המערכת: סרגלי הסטטוס והניווט, שמוצגים כשכבת-על מעל האפליקציה, הם שקופים למחצה, כך שהסמלים בסרגלים תמיד גלויים על רקע ה-Letterbox.
- יחס גובה-רוחב שניתן להגדרה: אפשר לשנות את יחס הגובה-רוחב של האפליקציה כדי לשפר את המראה שלה.

איור 2. אפליקציה עם פסי שחורים בצדדים ושיפורים בממשק המשתמש.
12L (API ברמה 32) כוללת את השיפורים הבאים בפונקציונליות:
מיקום שניתן להגדרה: במסכים גדולים, יצרני המכשירים יכולים למקם את האפליקציה בצד ימין או שמאל של התצוגה, כדי להקל על האינטראקציה.
עיצוב מחדש של לחצן ההפעלה מחדש: יצרני מכשירים יכולים לתת ללחצן ההפעלה מחדש של מצב התאימות לגודל מראה חדש כדי שהמשתמשים יוכלו לזהות אותו בקלות רבה יותר.
ב-Android 13 (API level 33) נוסף דיאלוג להדרכת המשתמשים לגבי מיקום האפליקציה עם המסגרת השחורה על המסך או הכללת המסגרת השחורה במצב מסך מפוצל:

איור 3. אפליקציה עם תיבת דו-שיח להדרכת משתמשים, שמוצגת עם פסי שחור בצדדים.
מצב תאימות לגודל
מצב תאימות לגודל הוא letterboxing ששומר על יחס הגובה-רוחב של האפליקציה וכולל אמצעי בקרה להפעלה מחדש. הפקד מאפשר למשתמשים להפעיל מחדש את האפליקציה ולצייר מחדש את התצוגה. מערכת Android מפעילה מצב תאימות לגודל עבור אפליקציות שלא ניתן לשנות את הגודל שלהן. כשפעילות עוברת למאגר תצוגה שלא תואם למידות של הפעילות, המערכת עשויה לשנות את קנה המידה של האפליקציה כדי למלא את תצוגת המכשיר לפחות במימד אחד.
שינויים בהגדרות המכשיר שיכולים להפעיל את מצב התאימות לגודל כוללים את השינויים הבאים:
- סיבוב המכשיר
- מכשיר מתקפל עובר למצב מקופל או לא מקופל
- מעבר בין מצב מסך מלא למצב מסך מפוצל
בעיה
מצב התאמה לגודל חל בדרך כלל על פעילויות שמוגבלות בכיוון או ביחס הגובה-רוחב שלהן, ומוגדרות (או נקבעות על ידי המערכת) כפעילויות שלא ניתן לשנות את הגודל שלהן.
האפליקציה שלכם נחשבת ככזו שאפשר לשנות את הגודל שלה – והיא לא תועבר למצב תאימות לגודל – אם היא עומדת באחד מהקריטריונים הבאים:
- ניתן לשינוי גודל באמצעות
resizeableActivity="true"
- תמיכה במצב תמונה בתוך תמונה (PIP)
- מוטמע
- האם השינוי מברירת המחדל שהוגדר לכל אפליקציה
FORCE_RESIZE_APP
הוחל על ידי יצרן המכשיר (המערכת מתעלמת מהמאפיינים שהוגדרו על ידי האפליקציה)
אם האפליקציה לא עומדת באף אחד מהתנאים, היא נחשבת כלא ניתנת לשינוי גודל, ויכול להיות שהיא תופעל במצב תאימות לגודל.

אפליקציה שלא ניתן לקבוע את גודלה קורסת במצב ריבוי חלונות.
אופטימיזציה
האפליקציה צריכה לתמוך בכל גדלי המסכים. כדי לשנות את גודל האפליקציה, צריך להגדיר את המאפיין android:resizeableActivity
של האלמנט <activity>
או <application>
לערך true
במניפסט האפליקציה. מעצבים פריסות רספונסיביות או אדפטיביות לאפליקציה. מידע נוסף זמין במאמרים בנושא תמיכה בגדלים שונים של מסכים ותמיכה במצב ריבוי חלונות.

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

אפליקציה שמוצגת רק לאורך עם תיבת מכתבים בפריסה לרוחב, ששינתה את הגודל שלה בהפעלה מחדש של אמצעי הבקרה.
מצב תאימות לתצוגה
מצב התאימות לתצוגה מונע הפעלה מחדש של אפליקציה כשהיא עוברת בין מסכים שונים, מה שיכול להפעיל שינוי בהגדרות כמו מצב צבע, זמינות של מסך מגע או שינוי בצפיפות המסך.
מצב התאימות של התצוגה מופעל כברירת מחדל במשחקים (על סמך הדגל android:appCategory
) כדי לשפר את היציבות וההמשכיות.
בניגוד למצב תאימות לגודל, מצב תאימות לתצוגה לא מקפיא את ההגדרה של האפליקציה. האפליקציה עדיין יכולה לקבל את כל עדכוני ההגדרות דרך ממשקי API כמו הקריאה החוזרת (callback) של onConfigurationChanged()
, אבל היא לא תופעל מחדש באופן שישבש את הפעילות. המשמעות היא שמשחקים שתומכים כראוי בממשקי API כמו onConfigurationChanged() עדיין יכולים לעדכן את ממשק המשתמש שלהם בצורה רספונסיבית, גם אם הם במצב תאימות לתצוגה.
כדי לבטל את ההסכמה לשימוש במצב תאימות לתצוגה ולטפל בשינויים בהגדרות באפליקציה, צריך להצהיר על תמיכה בשינויים בהגדרות בקובץ AndroidManifest.xml
של האפליקציה ולטפל בשינויים בהגדרות בקריאה החוזרת onConfigurationChanged().
<activity
android:name=".MyGameActivity"
android:configChanges="colorMode|touchscreen|density|...">
...
</activity>
לולאות מרצדות
אם אפליקציה לא תומכת בכל כיווני התצוגה, היא עשויה לבקש שוב ושוב כיוונים חדשים כשמתרחש שינוי בהגדרה, וכך ליצור לולאה אינסופית שגורמת לתצוגה להבהב או לאפליקציה להסתובב ללא הפסקה.
בעיה
ב-Android 12 (רמת API 31) ומעלה, יצרני מכשירים יכולים להגדיר את המכשירים שלהם כך שיתעלמו מהגבלות על כיוון המסך שצוינו באפליקציות, ובמקום זאת יאכפו מצבי תאימות. לדוגמה, מכשיר מתקפל יכול להתעלם מההגדרה android:screenOrientation="portrait"
של פעילות מסוימת כשהפעילות מוצגת במסך הפנימי של המכשיר, בגודל של טאבלט במצב לרוחב.
אם הגבלות האוריינטציה של אפליקציה מתעלמות, האפליקציה יכולה להגדיר את האוריינטציה שלה באופן פרוגרמטי על ידי קריאה ל-Activity#setRequestedOrientation()
. הקריאה
מפעילה הפעלה מחדש של האפליקציה אם האפליקציה לא מטפלת בשינויים בהגדרות (ראו טיפול בשינויים בהגדרות). אחרי ההפעלה מחדש, המערכת שוב מתעלמת מההגבלות על האוריינטציה של האפליקציה, האפליקציה חוזרת על הקריאה ל-setRequestedOrientation()
, הקריאה מפעילה הפעלה מחדש של האפליקציה וכן הלאה בלולאה נצחית.
דרך נוספת שבה יכול להיות שתיתקלו בבעיה הזו היא כשהכיוון הטבעי (הכיוון הרגיל כפי שנקבע על ידי Android) של מסך המכשיר הוא לרוחב (כלומר, הקריאה ל-Display#getRotation()
מחזירה Surface.ROTATION_0
בזמן שיחס הגובה-רוחב של המכשיר הוא לרוחב). בעבר, האפליקציות הניחו שDisplay.getRotation() =
Surface.ROTATION_0
מייצג את המכשיר במצב אנכי, אבל זה לא תמיד המצב, למשל במסך הפנימי של חלק מהמכשירים המתקפלים ובחלק מהטאבלטים.
אפליקציה בתצוגה לרוחב במסך פנימי של מכשיר מתקפל עשויה לבדוק את סיבוב המסך, לקבל ערך של ROTATION_0
, להניח שהתצורה הטבעית של המכשיר היא לאורך ולקרוא לפונקציה setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
כדי להגדיר מחדש את פריסת האפליקציה. אחרי שהאפליקציה מופעלת מחדש (במצב לרוחב), יכול להיות שהיא שוב תבדוק את סיבוב המסך, תקבל ערך של ROTATION_0
, תקרא לפונקציה setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
ותמשיך את הלולאה האינסופית.

אפליקציה שפועלת רק במצב לרוחב ומוצגת במצב לאורך, מבצעת שיחות חוזרות ל-Activity#setRequestedOrientation()
.
אופטימיזציה
אפליקציות לא צריכות לבצע את הפעולות הבאות:
- צריך להגדיר כיוון ברירת מחדל באמצעות
Activity#setRequestedOrientation()
בשיטת הפעילותonCreate()
כי בקשת הכיוון יכולה להיות מופעלת באופן בלתי צפוי על ידי שינויים בהגדרות שלא טופלו - הנחה שכיוון המכשיר הטבעי (
ROTATION_0
) הוא לאורך - הגדרת כיוון על סמך אותות שלא קשורים לגודל החלון הנוכחי, כמו
Display#getRotation()
, נוכחות שלFoldingFeature
או ממשקי API שיצאו משימוש.

האפליקציה מטפלת בשינוי ההגדרה, אין לה הגבלות על כיוון המסך, ולכן היא לא נכנסת ללולאה של הבהובים.
פתרון עקיף לבעיות תאימות
מערכת Android מתעלמת מקריאות ל-Activity#setRequestedOrientation()
במצבים הבאים:
הפעילות כבר הופעלה מחדש מקריאה קודמת לשיטה או שהופעל טיפול בכפייה של סיבוב תאימות המצלמה (ראו תצוגה מקדימה של המצלמה בהמשך).
יצרני מכשירים יכולים להחיל את ההתנהגות הזו על אפליקציה עם
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
.במהלך הפעילות בוצעו יותר משתי בקשות לשינוי כיוון בשנייה אחת, מה שמצביע על כך שהתרחשה לולאה. מתוך שתי הבקשות בלולאה, מערכת Android משתמשת בזו שמגדילה את אזור התצוגה של האפליקציה.
יצרני מכשירים יכולים להחיל את ההתנהגות הזו על אפליקציה עם
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
.הבעלים של המכשיר הווירטואלי ביטלו את קריאת השיטה במכשירים נבחרים.
תצוגה מקדימה של המצלמה
התצוגה המקדימה של המצלמה (או העינית) באפליקציות של מצלמות עשויה להיות לא מיושרת או מעוותת בטאבלטים, במחשבים ניידים ובמסכים מתקפלים.
בעיה
במסמך הגדרת התאימות של Android מצוין שחיישן תמונה של מצלמה "חייב להיות מכוון כך שהמימד הארוך של המצלמה יתאים למימד הארוך של המסך".
אפליקציות מניחות לעיתים קרובות שהכיוון של המכשיר והכיוון של חיישן המצלמה הם לאורך – הנחה סבירה בטלפונים ניידים רגילים. אבל האוריינטציה הטבעית של טאבלטים ומחשבים ניידים ושל חיישני המצלמה שלהם יכולה להיות לרוחב. בנוסף, יכול להיות שלמכשירים עם גורמי צורה חדשים, כמו מכשירים מתקפלים, יהיו כמה כיוונים טבעיים וכמה חיישני מצלמה בכיוונים שונים.
התחלת פעילות עם כיוון מצלמה שהאפליקציה לא מצפה לו או מעבר בין מצלמות שונות או בין מסכי מכשיר (במכשירים מתקפלים) עלולים לגרום לתצוגה מקדימה של המצלמה שלא מיושרת או מעוותת.

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

התצוגה המקדימה של המצלמה מיושרת ומוגדרת בצורה נכונה בכל כיווני המכשיר.
פתרון עקיף לבעיות תאימות
מכשיר נמצא בכיוון טבעי כש-Display#getRotation()
מחזיר Surface.ROTATION_0
. המערכת מחשבת את
CameraCharacteristics.SENSOR_ORIENTATION
מתוך הכיוון הטבעי של המכשיר. מערכת Android מיישרת את חלון האפליקציה לאורך של אפליקציות שמוגבלות לאורך עם הכיוון הטבעי של המכשיר, שזה מה שרוב האפליקציות מצפות לו. בנוסף, מערכת Android חותכת את התמונה מחיישן המצלמה כשהכיוון של החיישן הוא לרוחב והתצוגה המקדימה של המצלמה היא לאורך. הפתרונות הספציפיים כוללים את הפתרונות הבאים:
הפעלת סיבוב בכוח של תצוגות מקדימות של מצלמה באפליקציות שמוגבלות למצב אנכי: אפליקציות שמוגבלות למצב אנכי מצפות שהכיוון הטבעי של המכשיר והכיוון של חיישן המצלמה יהיו אנכיים. עם זאת, ב-Android 12 (רמת API 31) ומעלה, אפליקציות יכולות לפעול בכמה כיווני מכשיר אם יצרני המכשירים מתעלמים מהגדרת הכיוון.
כשאפליקציה שמוגבלת למצב פורטרט מחוברת למצלמה, מערכת Android מסובבת את האפליקציה בכוח כדי ליישר את חלון הפורטרט של האפליקציה עם הכיוון הטבעי של המכשיר.
בטאבלטים מסוימים (ראו מכשירי הפניה), חלון האפליקציה במצב לאורך מסובב למצב לאורך במסך מלא כדי להתאים לכיוון הטבעי של המכשיר. האפליקציה תופסת את המסך המלא אחרי סיבוב בכוח.
טאבלט – כפיית סיבוב של אפליקציה שמוגבלת למצב אנכי.
במסך הפנימי של מכשירים מתקפלים במצב לרוחב (ראו מכשירי הפניה), פעילויות שמוצגות רק במצב לאורך מסובבות למצב לרוחב כדי להתאים לכיוון הטבעי כשהמכשיר פתוח. האפליקציה מוצגת עם פסים שחורים בצדדים אחרי סיבוב מאולץ.
מכשיר מתקפל – סיבוב בכוח של אפליקציה שמוגבלת למצב אנכי. האפליקציה מוצגת גם עם פסי צד שחורים.
חיתוך של המצלמה הקדמית הפנימית: בחלק מהמכשירים המתקפלים, החיישן של המצלמה הקדמית הפנימית נמצא במצב אופקי. בנוסף לסיבוב בכוח של התצוגה המקדימה של המצלמה במסך הפנימי המתקפל, מערכת Android חותכת את שדה הראייה של המצלמה הקדמית הפנימית (לרוחב) כך שהחיישן מצלם תצוגה הפוכה לכיוון המכשיר.
רענון בכוח של תצוגות מקדימות של המצלמה: המערכת עוברת בין שיטות הפעילות
onStop()
ו-onStart()
(כברירת מחדל) אוonPause()
ו-onResume()
(מוגדר על ידי OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE כהחלפה לכל אפליקציה) אחרי סיבוב בכוח כדי לוודא שהתצוגה המקדימה של המצלמה מוצגת בצורה תקינה.שינוי קנה מידה של יחס גובה-רוחב: המערכת משנה באופן דינמי את יחס הגובה-רוחב של התצוגה המקדימה של המצלמה שסובבה בכוח ליחס גובה-רוחב מינימלי גבוה יותר, כדי להבטיח שהתצוגה המקדימה של המצלמה תותאם בצורה נכונה.
מפתחי אפליקציות יכולים לעקוף את הפתרונות האלה אם האפליקציות מטפלות בתצוגה המקדימה של המצלמה בצורה נכונה. מידע נוסף על ביטול פעולות באפליקציות
ממשקי API שנעשה בהם שימוש לרעה
מערכת Android הוסיפה תמיכה בתכונות כמו מצב מרובה חלונות ובמכשירים כמו מכשירים מתקפלים. לכן, הוצאנו משימוש ממשקי API מדור קודם והחלפנו אותם בממשקי API עדכניים שפועלים בכל הגדלים של המסכים ובכל גורמי הצורה של המכשירים. עם זאת, ממשקי ה-API שהוצאו משימוש עדיין זמינים לצורך תאימות לאחור.
חלק מממשקי ה-API של View
מיועדים למטרות מיוחדות שמפתחים לא תמיד מבינים.
בעיה
מפתחים ממשיכים להשתמש בממשקי API שהוצאו משימוש Display
ומניחים בטעות שממשקי ה-API מחזירים את גבולות האפליקציה במקום את גבולות אזור התצוגה של המכשיר. או שמפתחים משתמשים בטעות בממשקי API של תצוגות למטרות מיוחדות כדי לקבל מדדים כלליים של תצוגה.
התוצאה היא חישובים שגויים כשממקמים מחדש רכיבים בממשק המשתמש אחרי אירועים של שינוי גודל חלון האפליקציה, מה שגורם לבעיות בפריסה.
ממשקי API של רשת המדיה שהוצאו משימוש ונעשה בהם שימוש לרעה:
מידע נוסף זמין במאמר בנושא תמיכה במצב מרובה חלונות.
ממשקי API של תצוגות שנעשה בהם שימוש לרעה:

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

ממשק ה-API מחשב בצורה נכונה את מדדי חלון האפליקציה.
פתרון עקיף לבעיות תאימות
שתי שיטות לביטול הגדרות משנות את ממשקי ה-API שהוצאו משימוש, Display
, ואת ממשקי ה-API שנעשה בהם שימוש לא תקין, View
, כדי להחזיר את גבולות האפליקציה:
ALWAYS_SANDBOX_DISPLAY_APIS
עבור ממשקי ה-API Display
; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
עבור ממשקי ה-API View
. ALWAYS_SANDBOX_DISPLAY_APIS
מוחל כברירת מחדל גם על אפליקציות שעומדות בדרישות להפעלת מצב תאימות לגודל.
פעילויות שקופות
פעילויות שקופות הן תוצאה של סגנונות רקע שקופים, לדוגמה:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
עיצובים שקשורים לתיבות דו-שיח, כמו Theme.MaterialComponents.Dialog
, יכולים לכלול סגנונות שגורמים לפעילויות להיות שקופות.
פעילויות שקופות לא מכסות את כל שטח התצוגה הזמין, ולכן קשה לנהל אותן כי שטח התצוגה הזמין יכול להשתנות בהתאם לשינויים בהגדרות, כמו סיבוב המכשיר, קיפול ופתיחה של המכשיר ומצב ריבוי חלונות.
בעיה
פעילות שקופה צריכה להיות בתוך הגבולות של הפעילות האטומה הראשונה שמתחתיה ברשימת הפעילויות של המשימה. עם זאת, פעילות אטומה שמפעילה תיבת דו-שיח של הרשאות יכולה להיות פעילות מעבר (פעילות שמפעילה פעילות אחרת ואז נעלמת). לכן, המערכת לא יכולה לקבוע את הגבולות של פעילות המעבר שהפעילה את פעילות תיבת הדו-שיח השקופה של ההרשאות.

המיקום של תיבת הדו-שיח לא נכון כי הפעילות הופעלה מ-trampoline.
אופטימיזציה
פעילויות שקופות מקבלות את המגבלות שלהן מהפעילות האטומית העליונה שמתחתיהן במצבור הפעילויות של המשימה. הפעילות האטומה צריכה להיות זמינה לאורך כל מחזור החיים של הפעילות השקופה, מהרגע שבו הפעילות נוצרת ועד שהיא נהרסת. לכן, אל תפעילו בקשות הרשאה מפעילויות מסוג trampoline.
אם פעילות מסוג trampoline מפעילה בקשת הרשאה, יכול להיות שהמשתמש לא יוכל לראות את תיבת הדו-שיח של ההרשאה, כי פעילות ה-trampoline תיהרס לפני שהמשתמש יקבל הזדמנות להגיב לתיבת הדו-שיח, ויכול להיות שהמידות והמיקום של פעילות תיבת הדו-שיח יחושבו בצורה שגויה.
אפליקציות צריכות תמיד להפעיל בקשות להרשאות מפעילויות שנשארות גלויות עד שהמשתמש מחליט לגבי מתן הרשאה.
פינות מעוגלות
פעילות יכולה להיות שקופה בגלל סגנון שמציין שקיפות של הרקע, או בגלל שהתוכן של הפעילות לא ממלא את שטח התצוגה הזמין. אם פעילות שקופה ממלאת את שטח המסך הזמין, המערכת מעגלת את הפינות של הפעילות באופן אוטומטי אם יצרן המכשיר הגדיר אותה לעשות זאת. אבל אם פעילות שקופה (כמו תיבת דו-שיח של הרשאה) לא ממלאת את השטח הזמין, אתם יכולים להחליט אם להחיל פינות מעוגלות או לא.
תיבות הדו-שיח של ההרשאות לא ממלאות את שטח התצוגה הזמין כי פריסת תיבת הדו-שיח משתמשת בדרך כלל ב-LayoutParams.WRAP_CONTENT ולא ב-LayoutParams.MATCH_PARENT.

תיבת דו-שיח עם פינות מעוגלות ממוקמת בצורה נכונה מעל פעילות ההפעלה הגלויה.
פתרון עקיף לבעיות תאימות
פעילויות שפותחות פעילויות של תיבת דו-שיח יישארו גלויות עד שהמשתמש יגיב לתיבת הדו-שיח.
המערכת מוודאת שפעילות שקופה יורשת את כל האילוצים מהפעילות האטומה הראשונה שמתחת לפעילות השקופה במצבור הפעילויות, כולל אילוצים שקשורים ל:
- מצב תאימות לגודל
- כיוון
- יחס גובה-רוחב
משחקי Unity
משחקי Unity פועלים במסך מלא ב-Android או במצב ריבוי חלונות. עם זאת, בהרבה משחקי Unity, המיקוד נעלם והתוכן מפסיק להיטען כשהאפליקציה מועברת למצב ריבוי חלונות.
בעיה
Unity הוסיפה אפשרות Resizable Window
ב-Unity 2019.4 כדי לתמוך במצב מרובה חלונות ב-Android. עם זאת,
ההטמעה הראשונית לא הגיבה בצורה נכונה למחזור החיים של הפעילות במצב מרובה חלונות, ולכן UnityPlayer השהה את ההפעלה כשהאפליקציה איבדה את המיקוד. הנגן הציג מסך שחור או את הפריים האחרון של המשחק, שהיה קפוא. המשחק ימשיך רק אם המשתמש יקיש על המסך. אפליקציות רבות שמשתמשות במנוע Unity נתקלות בבעיה הזו ומוצגות כחלון שחור במצב ריבוי חלונות.

המשחק מאבד את המיקוד במצב ריבוי חלונות ומוצג כחלון שחור.
אופטימיזציה
משדרגים את Unity לגרסה 2019.4.40 ואילך ומייצאים מחדש את המשחק. חשוב להשאיר את האפשרות Resizable Window
מסומנת בהגדרות של נגן Android. אחרת, המשחק יושהה כשהוא לא במרכז, גם אם הוא גלוי לחלוטין במצב ריבוי חלונות.

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

עדיין אפשר לשנות את הגודל של אפליקציות עם כיוון נעול.
עם זאת, אם הפעילות מוגדרת כפעילות שלא ניתן לשנות את הגודל שלה (resizeableActivity = false), ממשק המשתמש של הפעילות משנה את הגודל שלו תוך שמירה על יחס רוחב-גובה זהה.

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

שינוי הגודל של חלון עם עינית של מצלמה
בדיקת האפליקציה לאיתור בעיות תאימות
כדי לבדוק את האפליקציה ולהבין איך היא מתנהגת בגורמי צורה שונים, אפשר להיעזר במקורות המידע הבאים:
- סטרימינג של מכשירים: כדי לבדוק את האפליקציה במכשירים לייצור (כולל מכשירי הפניה) שמתארחים במרכזי נתונים של Google, אפשר לעיין במאמר סטרימינג של מכשירי Android, מבית Firebase .
- אמולטורים ב-Android Studio: למידע על יצירת אמולטורים למכשירי הפניה, אפשר לעיין במאמר יצירה וניהול של מכשירים וירטואליים.
- Android Studio resizable emulator: למידע על גישה למכשירים וירטואליים, אפשר לעיין במאמר הרצת אפליקציות ב-Android Emulator
בפורמט letterbox
מוודאים שכל פעילות יכולה להשתמש בכל שטח המסך שזמין לאפליקציה. קודם כול, מצהירים על הקוד הבא בתיקיית הבדיקה:
Kotlin
fun isLetterboxed(activity: AppCompatActivity): Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(AppCompatActivity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds(); Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
לאחר מכן מריצים בדיקה כדי לוודא שההתנהגות תואמת לציפיות ושהפעילות המטורגטת לא מוצגת עם מסגרת שחורה:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertFalse(it.isLetterboxed()) } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); @Test public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity( activity -> { assertFalse(activity.isLetterboxed()); }); } }
מומלץ להריץ את הבדיקה הזו רק עד שהיא עוברת ומוודאת שהפעילויות של האפליקציה תופסות את כל שטח התצוגה שזמין לאפליקציה. חשוב לבדוק את האפליקציה בכל סוגי המכשירים כדי לוודא שההתנהגות שלה עקבית.
שינויים מברירת המחדל של המערכת לכל אפליקציה
מערכת Android מספקת שינויים שמשנים את ההתנהגות המוגדרת של אפליקציות. לדוגמה, החלפת ברירת המחדל FORCE_RESIZE_APP
מורה למערכת לעקוף את מצב התאימות לגודל ולשנות את גודל האפליקציה כך שתתאים לממדי התצוגה, גם אם resizeableActivity="false"
מצוין בקובץ המניפסט של האפליקציה.
יצרני מכשירים מחילים שינויים על אפליקציות נבחרות – או על כל האפליקציות – במכשירים ספציפיים עם מסך גדול. ב-Android 14 (רמת API 34) ומעלה, משתמשים יכולים להחיל שינויים באפליקציות דרך הגדרות המכשיר. ב-Android 16 (API ברמה 36) ומעלה, בעלי מכשירים וירטואליים מחילים שינויים על מכשירים נבחרים שמנוהלים על ידי בעלי המכשירים הווירטואליים.
שינויים על ידי המשתמשים באפליקציות
ב-Android מגרסה 14 ומעלה, תפריט ההגדרות מאפשר למשתמשים לשנות את יחס הגובה-רוחב של האפליקציות. במכשירים עם מסך גדול, כמו מכשירי ההפניה, התפריט מיושם.
בתפריט מופיעה רשימה של כל האפליקציות שמותקנות במכשיר. המשתמשים בוחרים אפליקציה ואז מגדירים את יחס הגובה-רוחב של האפליקציה ל-3:4, ל-1:1, למסך מלא או לערך אחר שהוגדר על ידי יצרן המכשיר. המשתמשים יכולים גם לאפס את יחס הגובה-רוחב לברירת המחדל של האפליקציה, שמוגדרת במניפסט האפליקציה.
אפליקציות יכולות לבטל את ההסכמה לשינוי התאימות על ידי הגדרת התגים הבאים של PackageManager.Property
:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
כדי לבטל את ההסכמה לשינוי יחס הגובה-רוחב של המשתמש לצורך תאימות, מוסיפים את המאפיין למניפסט של האפליקציה ומגדירים את הערך ל-
false
:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
האפליקציה לא תופיע ברשימת האפליקציות בהגדרות המכשיר. המשתמשים לא יוכלו לשנות את יחס הגובה-רוחב של האפליקציה.
הגדרת המאפיין לערך
true
לא משפיעה על כלום.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
כדי לבטל את ההסכמה לשימוש באפשרות של מסך מלא לשינוי יחס הגובה-רוחב של המשתמש לצורך תאימות, מוסיפים את המאפיין למניפסט של האפליקציה ומגדירים את הערך ל-
false
:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
האפשרות 'מסך מלא' מוסרת מרשימת האפשרויות של יחסי הגובה-רוחב בהגדרות המכשיר. המשתמשים לא יוכלו להחיל את ההגדרה לביטול ההצגה במסך מלא על האפליקציה שלכם.
הגדרת המאפיין הזה ל-
true
לא משפיעה.
אופטימיזציה של האפליקציה לכל המסכים: אל תגדירו הגבלות על יחסי גובה-רוחב באפליקציה. השתמשו בסיווגים של גודל החלון כדי לתמוך בפריסות שונות בהתאם לכמות השטח הזמין לתצוגה.
שינויים מברירת המחדל של המערכת לכל אפליקציה במכשיר
יצרני מכשירים ובעלי מכשירים וירטואליים (אפליקציות נבחרות מהימנות עם הרשאות מיוחדות) מבצעים שינויים בהגדרות של אפליקציות ספציפיות במכשירים מסוימים, כולל טאבלטים, מכשירים מתקפלים, מכשירי ChromeOS ומסכים ברכב. יכול להיות שמכשירי ההפניה יחילו חלק מהשינויים על מגוון אפליקציות כברירת מחדל.
אפליקציות יכולות לבטל את ההסכמה לרוב ההגדרות שמוגדרות מראש (פרטים בטבלה הגדרות שמוגדרות מראש לכל אפליקציה שבהמשך).
אתם יכולים לבדוק את האפליקציה עם או בלי הפעלת שינויים באמצעות מסגרת התאימות (ראו כלים של מסגרת התאימות). כשההגדרה הזו מופעלת, ההגדרות שמוגדרות בה חלות על כל האפליקציה.
אפשר גם להשתמש בממשק הגישור של Android (adb) כדי להפעיל או להשבית שינויים ולבדוק אילו שינויים חלים על האפליקציה.
כדי להפעיל או להשבית את ההגדרות שמוגדרות מראש:
adb shell am compat enable/disable <override name/id> <package>
במכשירים להתייחסות, בודקים אילו שינויים חלים על האפליקציה:
adb shell dumpsys platform_compat | grep <package name>
בטבלה הבאה מפורטים אמצעי ההגנה הזמינים, וגם הנחיות לאופטימיזציה של האפליקציה כדי שלא תצטרכו להסתמך על אמצעי ההגנה האלה. אתם יכולים להוסיף דגלים של מאפיינים למניפסט של האפליקציה כדי לבטל את ההסכמה להחלפות מסוימות.
שינויים מברירת המחדל של המערכת לכל אפליקציה | |||
---|---|---|---|
סוג | שם | מזהה | תיאור |
יכולת שינוי הגודל | FORCE_RESIZE_APP | 174042936 | עוקף את מצב התאימות לגודל האפליקציה בשינויים בהגדרות. |
FORCE_NON_RESIZE_APP | 181136395 | האפליקציה נאלצת לעבור למצב תאימות לגודל הדף בשינויים בהגדרות. | |
יחס גובה-רוחב | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | הגדרה לביטול מסנן השיחות שצריך להפעיל כדי להחיל ביטולים אחרים של יחס גובה-רוחב. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | אם ההגדרה הזו מופעלת (ברירת המחדל), המגבלות חלות על פעילויות שמוצגות רק במצב אנכי. | |
OVERRIDE_MIN_ASPECT_RATIO_SMALL | 349045028 | משנה את יחס הגובה-רוחב המינימלי ל-4:3. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | משנה את יחס הגובה-רוחב המינימלי ל-3:2. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | השינוי של יחס הגובה-רוחב המינימלי ל-16:9. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | משנה את יחס הגובה-רוחב המינימלי כך שיתאים ל-50% מגודל התצוגה (או ליחס הגובה-רוחב של המסך המפוצל). | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | ההגדרה הזו משביתה את שינוי יחס הגובה-רוחב המינימלי, כך שהאפליקציות יוצגו במסך מלא כשהמכשיר במצב אנכי. | |
כיוון | OVERRIDE_ANY_ORIENTATION | 265464455 | הגדרה שמאפשרת לשנות את הכיוון. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | ההגדרה הזו מבטלת את ההגבלות על הכיוון, על שינוי הגודל ועל יחס הגובה-רוחב. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | ההגדרה הזו מאפשרת לשנות את הכיוון לאורך כשלא מוגדר כיוון לפעילות. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | מבטל את הכיוון ומשתמש בכיוון הטבעי של המכשיר (nosensor ) כשאין כיוון מוגדר לפעילות. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | מסובב אפליקציות שפועלות רק במצב לרוחב ב-180 מעלות. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | ההגדרה הזו מגבילה את היקף השימוש בשינוי הכיוון למקרים שבהם האפליקציה מחוברת למצלמה. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | ההגדרה הזו קובעת שהתצוגה תהיה קבועה לרוחב כשהמשימה במסך מלא (כולל כשהיא מוצגת עם פסי שוליים). | |
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | המערכת מתעלמת מבקשות של האפליקציה לגבי כיוון המסך כדי למנוע לולאות אינסופיות של סיבוב המסך. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | מתעלם מבקשות חוזרות לשינוי הכיוון בזמן שהפעילות מופעלת מחדש. אם מערכת Android מזהה שאפליקציה מבקשת לפחות שני כיוונים חדשים בתוך שנייה אחת, המערכת מחשיבה את זה כלולאה אינסופית של סיבובים ומחיל את הביטול. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | ההגדרה הזו מונעת הצגת פסים שחורים בצדדים על ידי השבתת ההגדרה 'התעלמות מבקשת כיוון' של יצרן המכשיר. | |
ממשקי API של ארגז חול | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | מונע שינוי בהתנהגות של ממשקי API לתצוגה. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | האפשרות הזו גורמת לממשקי ה-API של Display באפליקציה להחזיר את גבולות האפליקציה. Display ממשקי API מחזירים גבולות של אזור תצוגה לוגי, אבל לפעמים האפליקציה מניחה שממשקי API מחזירים גבולות של אפליקציה, מה שמוביל לבעיות בממשק המשתמש.Display |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | האפשרות הזו מאלצת את ממשקי ה-API של View שבהם נעשה שימוש באפליקציה להחזיר את גבולות האפליקציה. View ממשקי API מחזירים גבולות של אזור תצוגה לוגי, אבל לפעמים האפליקציה מניחה שממשקי API מחזירים גבולות של אפליקציה, מה שמוביל לבעיות בממשק המשתמש.View |
|
תאימות המצלמה | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | משבית את סיבוב המסך. כברירת מחדל, כל אפליקציות המצלמה עם אוריינטציה קבועה מסובבות בכוח כשהתצוגה המקדימה של המצלמה פתוחה. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | מסירה את הרענון הקשיח שמוחל כברירת מחדל כשמבצעים סיבוב בכוח של תצוגה מקדימה של המצלמה. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | המעבר מרענון קשיח לרענון רך כשמבצעים סיבוב בכוח של תצוגה מקדימה של מצלמה, מה שעוזר לשמר את המצב במהלך הסיבוב בכוח. כברירת מחדל, מערכת Android מבצעת רענון מלא כשמבצעים סיבוב בכוח של התצוגה המקדימה של המצלמה. רענון מלא עלול לגרום לבעיות באפליקציות, כמו איבוד הנתונים או מסך שחור, בהתאם לאופן שבו האפליקציות שמרו במטמון את הנתונים הקודמים. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | חיתוך של מאגר התמונות של המצלמה הקדמית הפנימית. אם ההגדרה מושבתת, החיתוך של המצלמה הקדמית הפנימית מוסר ושדה הראייה של התצוגה המקדימה של המצלמה גדל. במכשירי מסך מתקפל מסוימים (ראו מכשירי ייחוס), המערכת חותכת את התצוגה המקדימה של המצלמה בכל אפליקציות המצלמה כשמשתמשים במצלמה הקדמית הפנימית. | |
שונות | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | מונעת את ההשחרה של האפליקציה כשהיא מאבדת את המיקוד במצב מסך מפוצל. האפליקציה ממתינה למיקוד לפני שהיא מציירת את התוכן שלה, מה שעלול לגרום להקפאה או להשחרה של האפליקציה. ההחלפה מאפשרת ל-Android לשלוח לאפליקציה אירוע מיקוד מזויף, שמאותת לאפליקציה להתחיל לצייר תוכן שוב. |
FORCE_RESIZE_APP
ההגדרה הזו מאלצת את החבילות שהשינוי חל עליהן להיות ניתנות לשינוי גודל, ומאפשרת להן להיכנס למצב ריבוי חלונות. ההגדרה חלה על כל גדלי המסכים.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
במניפסט של האפליקציה, מגדירים את מאפיין android:resizeableActivity
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
כדאי להשתמש בפריסות רספונסיביות או מותאמות כדי שהאפליקציות יותאמו לכל הגדלים של המסכים ויחסי הגובה-רוחב. מידע נוסף על תמיכה בגדלים שונים של מסכים
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את העקיפה ולאפשר שינוי גודל של האפליקציה:
adb shell am compat enable FORCE_RESIZE_APP <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable FORCE_RESIZE_APP <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
FORCE_NON_RESIZE_APP
ההגדרה הזו מאלצת את החבילות שאליהן חל הביטול להיות לא ניתנות לשינוי גודל, ולעבור למצב תאימות גודל בשינויים בהגדרות. ההגדרה חלה על כל גדלי המסכים.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מגדירים את המאפיין android:resizeableActivity
ואת דגל המטא-נתונים android.supports_size_changes
לערך false
במניפסט של האפליקציה, ומצהירים על הגבלה של כיוון או יחס רוחב-גובה.
איך מבצעים אופטימיזציה של אפליקציות
כל האפליקציות שמתנהלות בצורה תקינה כשמשנים את הגודל שלהן צריכות להגדיר את android:resizeableActivity
או את android.supports_size_changes
לערך true
.
צריך לשפר אפליקציות אחרות כדי שהן יתנהגו בצורה טובה כשמשנים את הגודל שלהן. למידע נוסף: android:resizeableActivity
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול ולמנוע את שינוי הגודל של האפליקציה:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO
השומר של כל ההחלפות שמכריחות יחס גובה-רוחב מינימלי נתון.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מגדירים את android:minAspectRatio
ברמת הפעילות או ברמת האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
אל תגדירו באפליקציה הגבלות על יחסי גובה-רוחב. ודאו שהאפליקציה תומכת בגדלים שונים של מסכים. כדי לתמוך בפריסות שונות בהתאם לכמות המקום שהאפליקציה תופסת במסך, אפשר להשתמש במחלקות של גודל החלון. מידע נוסף זמין במאמרים בנושא Compose WindowSizeClass
API ו-View WindowSizeClass
API.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מציינים הגבלה על יחס גובה-רוחב או מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
מגביל את הגדרות האפליקציה שמכריחות יחס גובה-רוחב מינימלי לפעילויות עם אוריינטציה של פורטרט בלבד. ההגדרה הזו מופעלת כברירת מחדל, והיא תקפה רק אם המדיניות OVERRIDE_MIN_ASPECT_RATIO
גם מופעלת.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_SMALL
הגדרת יחס הגובה-רוחב המינימלי של הפעילות לערך קטן (4:3).
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
הגדרת יחס הגובה-רוחב המינימלי של הפעילות לערך בינוני (3:2).
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
הגדרת יחס הגובה-רוחב המינימלי של הפעילות לערך גדול (16:9).
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
מאפשר להשתמש ביחס גובה-רוחב של מסך מפוצל. מאפשר לאפליקציה להשתמש בכל השטח שזמין במצב מסך מפוצל, בלי להשאיר שוליים שחורים.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
ההגדרה הזו משביתה את ההחלפה של יחס הגובה-רוחב המינימלי במסך מלא לאורך, כדי להשתמש בכל שטח המסך הזמין.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_ANY_ORIENTATION
ההגדרה הזו מאפשרת להגדרות הבאות לבטל את הכיוון:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מגדירים את מאפיין המניפסט activity:screenOrientation
או משתמשים ב-API Activity#setRequestedOrientation()
.
איך מבצעים אופטימיזציה של אפליקציות
האפליקציה צריכה לתמוך בכל האוריינטציות. שינוי אוריינטציה הוא שינוי בהגדרות, שאפשר לטפל בו באחת משתי דרכים: לאפשר למערכת להרוס את האפליקציה וליצור אותה מחדש, או לנהל את השינויים בהגדרות בעצמכם. אם אתם מנהלים את שינויי ההגדרות בעצמכם, תוכלו לשמור את מצב האפליקציה באמצעות ViewModel
. במקרים מוגבלים מאוד, אפשר להחליט לנעול את הכיוון רק במסכים קטנים, אבל יכול להיות שהאפשרות הזו לא תתאים לכל המסכים כמו האפשרות לאפשר למשתמש לסובב את האפליקציה לפי הצורך. ב-Android 12L ובגרסאות מתקדמות יותר,
תצורת המכשיר יכולה לבטל את ההגדרה של כיוון קבוע. מידע נוסף על טיפול בשינויים בהגדרות ותמיכה בכל הכיוונים זמין במאמרים טיפול בשינויים בהגדרות, סקירה כללית של ViewModel והכיוון של האפליקציה מוגבל בטלפונים אבל לא במכשירים עם מסך גדול.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_ANY_ORIENTATION_TO_USER
מאפשר לאפליקציה לתפוס את כל השטח הפנוי במסך. ההגדרה הזו מבטלת את כל ההגבלות על הכיוון, שינוי הגודל ויחס הגובה-רוחב שצוינו במניפסט של האפליקציה. בנוסף, המכשיר מתעלם משיחות אל Activity#setRequestedOrientation()
או אל Activity#getRequestedOrientation()
.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
לא מגדירים את מאפיין המניפסט
android:screenOrientation
או מגדירים את המאפיין לערך"user"
.מגדירים את מאפיין המניפסט
android:resizeableActivity
לערךtrue
.במסכים קטנים, כדי לתמוך בשינוי גודל האפליקציה תוך השבתת מצב ריבוי חלונות באמצעות
android:resizeableActivity=false
, צריך להגדיר את דגל המטא-נתוניםandroid.supports_size_changes
לערךtrue
. לא מגדירים אתminAspectRatio
ואתmaxAspectRatio
.
איך מבצעים אופטימיזציה של אפליקציות
מומלץ להפעיל באפליקציה תמיכה בכל האוריינטציות, ולא להגדיר מפרט בקובץ המניפסט של האפליקציה.screenOrientation
כדי לתמוך בשינוי גודל האפליקציה, במצב מרובה חלונות ובכל יחסי הגובה-רוחב של המסך, צריך להגדיר את המאפיין android:resizeableActivity
בקובץ המניפסט של האפליקציה לערך true
. מידע נוסף על תמיכה בגדלים שונים של מסכים
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
הגדרה של כיוון לאורך לכל הפעילויות בחבילה. אלא אם האפשרות OVERRIDE_ANY_ORIENTATION מופעלת, הדריסה משמשת רק אם לא צוין כיוון קבוע אחר לפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
ההגדרה הזו מפעילה את האפשרות nosensor לשינוי הכיוון של כל הפעילויות בחבילה. אלא אם האפשרות OVERRIDE_ANY_ORIENTATION מופעלת, הדריסה משמשת רק כשלא צוין כיוון קבוע אחר לפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
המדיניות מפעילה את האפשרות reverseLandscape לכל הפעילויות בחבילה. אלא אם האפשרות OVERRIDE_ANY_ORIENTATION מופעלת, הדריסה משמשת רק כשלא צוין כיוון קבוע אחר לפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
ההגדרות של המגבלות OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, ושל OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE יחולו רק כשהחיבור למצלמה פעיל.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
דגלי נכס לשינוי ברירת המחדל
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
ההגדרה הזו מגבילה את כיוון המסך לכיוון טבעי לרוחב כשהתנאים הבאים מתקיימים:
- הפעילות מוצגת במסך מלא
- המאפיין של רכיב הביטול
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
לא מופעל - ההגדרה 'התעלמות מבקשת כיוון' של יצרן המכשיר מופעלת עבור המסך
- כיוון התצוגה הטבעי הוא לרוחב
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
לא ישים. הבעיה צריכה להיפתר בלוגיקה של האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
ההגדרה הזו מפעילה מדיניות תאימות שמדלגת על עדכון של כיוון האפליקציה בתגובה לקריאה של האפליקציה אל Activity#setRequestedOrientation()
כשהאפליקציה מופעלת מחדש או שיש לה טיפול פעיל בתאימות למצלמה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מגדירים את דגל המאפיין PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
ההגדרה הזו מפעילה את מדיניות התאימות שמתעלמת מהכיוון שהאפליקציה מבקשת בתגובה לקריאה של האפליקציה אל Activity#setRequestedOrientation()
יותר מפעמיים בשנייה אחת, אם הפעילות לא מוצגת בפורמט Letterbox לכיוון קבוע.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
לא ישים. הבעיה צריכה להיפתר בלוגיקה של האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
ההגדרה הזו מחריגה חבילות מהתנהגות של בקשות להתעלמות מהגדרת הכיוון, שאפשר להפעיל אותה על ידי יצרני מכשירים לאזור תצוגה או לתצוגה כולה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
לא ישים. הבעיה צריכה להיפתר בלוגיקה של האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
אי אפשר לבטל את ההסכמה. השבתת ההחלפה יכולה להיות מסוכנת אם האפליקציה לא תואמת למכשיר שבו מופעלת ההגדרה 'יצרן המכשיר מתעלם מבקשת הכיוון'. כדי להשבית את ההגדרה הזו, צריך ליצור קשר עם Android Developer Relations.
דגלי נכס לשינוי ברירת המחדל
לא הוגדרו דגלי נכס לשינוי הזה.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
NEVER_SANDBOX_DISPLAY_APIS
האפשרות הזו מאלצת את החבילות אף פעם לא להחיל ארגז חול של Display
API על פעילות במצב של תאימות לגודל או במצב של תאימות לתיבת מכתב. ממשקי ה-API Display
ממשיכים לספק את גבולות אזור התצוגה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
כדי להצהיר על פעילויות שניתן לשנות את הגודל שלהן, צריך להגדיר את מאפיין המניפסט android:resizeableActivity
לערך true
או את דגל המטא-נתונים android.supports_size_changes
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
אפליקציות שמוצהר לגביהן שהן ניתנות לשינוי גודל מלא, לא יכולות להסתמך על גודל התצוגה כדי למקם רכיבי ממשק משתמש. כדאי להעביר את האפליקציה לממשקי API עדכניים שמספקים WindowMetrics
. אם אתם משתמשים ב-Jetpack Compose, כדאי להשתמש ב-API WindowSizeClass
כדי לצייר את ממשק המשתמש בהתאם לשטח המסך שהאפליקציה תופסת בתצוגה הנוכחית. איך משתמשים בסיווגים של גודל החלון
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
אי אפשר לבטל את ההסכמה. מעבר מממשקי API שהוצאו משימוש.
דגלי נכס לשינוי ברירת המחדל
לא הוגדרו דגלי נכס לשינוי הזה.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
ALWAYS_SANDBOX_DISPLAY_APIS
ההגדרה הזו מאלצת את החבילות להחיל תמיד ארגז חול של API Display
ללא קשר למצב החלון. ממשקי ה-API של Display
תמיד מספקים את גבולות האפליקציה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
כדי להצהיר שאי אפשר לשנות את הגודל של פעילויות, מגדירים את המאפיין android:resizeableActivity
לערך false
או את דגל המטא-נתונים android.supports_size_changes
לערך false
.
איך מבצעים אופטימיזציה של אפליקציות
אפליקציות שמצהירות שהן ניתנות לשינוי גודל מלא לא צריכות להסתמך על גודל התצוגה כדי למקם רכיבי ממשק משתמש. כדאי להעביר את האפליקציה מממשקי API שהוצאו משימוש לממשקי API עדכניים שמספקים WindowMetrics
. מידע נוסף זמין במאמר בנושא WindowMetricsCalculator
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
אי אפשר לבטל את ההסכמה. מעבר מממשקי API שהוצאו משימוש.
דגלי נכס לשינוי ברירת המחדל
לא הוגדרו דגלי נכס לשינוי הזה.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
הפקודה מאלצת את החבילות להפעיל את ממשקי ה-API הבאים של View
בארגז חול בהתאם לגבולות הפעילות:
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
כדי לפתור את הבעיה בקוד האפליקציה, צריך להשתמש בממשקי API שמספקים את הגבולות של חלון האפליקציה והיסטים ביחס לחלון האפליקציה, ולא את הגבולות של תצוגת המכשיר והיסטים ביחס לתצוגת המכשיר.
איך מבצעים אופטימיזציה של אפליקציות
אפליקציות צריכות להשתמש בממשקי API של View
, תוך התחשבות באפשרות של הוספת מסגרת שחורה (letterboxing) והפעלת מצב ריבוי חלונות באפליקציה. מידע נוסף זמין במאמר WindowMetricsCalculator
.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
משבית את הסיבוב הכפוי. שיפור חוויית המשתמש באפליקציות מסוימות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
לערך false
.
איך מבצעים אופטימיזציה של אפליקציות
אל תסתמכו על נתוני הכיוון של חיישן המצלמה או על פרטי המכשיר ששמורים במטמון. הנחיות לגבי תאימות למצלמות זמינות במאמרים הצגת תכונת עינית המצלמה ותמיכה במשטחים שניתן לשנות את הגודל שלהם באפליקציית המצלמה.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
לערך true
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את העקיפה, שמסירה את סיבוב המסך:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
כדי להסיר את הביטול ולאפשר את סיבוב המסך:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
ההגדרה הזו משביתה את רענון הפעילות אחרי סיבוב מאולץ. משפר את חוויית המשתמש כשריענון גורם לאובדן מצב באפליקציות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
לערך false
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר בנושא OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
לערך true
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול, שמסיר את רענון הפעילות:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
כדי להסיר את שינוי ברירת המחדל, וכך לאפשר רענון של הפעילות:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
ההגדרה הזו גורמת לכך שהחבילות שאליהן היא מוחלת יבצעו רענון פעילות באמצעות מחזור של onResume()
→ onPause()
→ onResume()
ולא באמצעות מחזור של onResume()
→
onStop()
→ onResume()
אחרי סיבוב מאולץ של תאימות המצלמה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר בנושא OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
ההגדרה הזו מאלצת את הפלט של המצלמה להיחתך לכיוון ההפוך כשהכיוון של המצלמה לא תואם לכיוון הטבעי של המכשיר. הרבה אפליקציות לא מטפלות במצב הזה ומציגות תמונות מתוחות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מגדירים את דגל המאפיין PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר בנושא OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את ההחלפה, שכוללת חיתוך של המצלמה הקדמית הפנימית:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
כדי להסיר את השינוי, וכך להסיר את החיתוך של המצלמה הקדמית הפנימית:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
מונעת מאפליקציות לבטל את ההסכמה לשיתוף המסך של האפליקציה (ראו הצגת מדיה). ההגדרה הזו מופעלת כשאפליקציות עושות שימוש לרעה ב-API createConfigForDefaultDisplay()
כדי לאלץ צילום מסך מלא ולסכן את פרטיות המשתמשים על ידי חשיפת התוכן של ההתראות, שצולמו במסך מלא אבל לא בשיתוף מסך האפליקציה, וכל האפליקציות ללא קשר למצב החלון.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מאפשרת את התנהגות ברירת המחדל של הקרנת מדיה (שמוטמעת ב-Android 14, API level 34, עם createScreenCaptureIntent()
), שמאפשרת למשתמשים להחליט אם לשתף את המסך המלא או חלון של אפליקציה אחת, ללא קשר למצב החלון. אפשר גם להתקשר למספר createScreenCaptureIntent(MediaProjectionConfig)
עם ארגומנט MediaProjectionConfig
שמוחזר מקריאה אל createConfigForUserChoice()
.
איך מבצעים אופטימיזציה של אפליקציות
המשתמשים יכולים לבחור אם לשתף את כל התצוגה של המכשיר או חלון של אפליקציה במהלך הקרנת מדיה. החל מ-Android 14, זוהי התנהגות ברירת המחדל.
כדי לתמוך במצב מרובה חלונות, צריך לאפשר שינוי גודל של האפליקציה (resizeableActivity="true"
).
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
בגלל החשיבות של פרטיות המשתמשים, האפליקציה שלך לא יכולה להשבית את ההגדרה הזו או לבטל את ההסכמה לה.
דגלי נכס לשינוי ברירת המחדל
ללא.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול, שמבטל את ביטול ההסכמה של האפליקציה לשיתוף מסך חלקי (כלומר, מפעיל שיתוף מסך חלקי):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
כדי להסיר את הביטול, שמאפשר לאפליקציה לבטל את השיתוף של חלק מהמסך:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
ההגדרה הזו מאפשרת לשלוח מיקוד מזויף לאפליקציות שלא נמצאות במיקוד במצב מסך מפוצל. חלק ממנועי המשחקים מחכים לקבל פוקוס לפני שהם מציירים את התוכן של האפליקציה. לכן, פוקוס מזויף עוזר לאפליקציות להימנע ממצב שבו הן מושבתות כשהן מופעלות מחדש ועדיין אין להן פוקוס.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מגדירים את דגל המאפיין PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
כדי להימנע מהבעיה הזו, חשוב לוודא שהאפליקציה מטפלת היטב בכמה כיוונים ובשינויים בהגדרות. כדי להכין את האפליקציה למסכים גדולים, צריך לפעול לפי ההנחיות בנושא איכות האפליקציה במסכים גדולים.
אם אתם מריצים את מנוע המשחקים Unity, אתם צריכים לשדרג לגרסה 2019.4.40 ואילך ולייצא מחדש את המשחק. מסמנים את האפשרות חלון שניתן לשינוי גודל בהגדרות של Android Player.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל המאפיין PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
לערך false
.
דגלי נכס לשינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS
כשההחלפה מופעלת, הפעילות מקבלת הגדרה שמשולבת עם שוליים של סרגל הכיתוב. בדרך כלל, ההזחות של סרגל הכתוביות מנותקות מההגדרה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו ביטול ההגדרה
מפעילים תצוגה מקצה לקצה או מעדכנים את ה-SDK לטירגוט של האפליקציה לרמת API 35 ומעלה. תוכלו לעיין במקורות המידע הבאים:
- כתיבת הודעה: מידע על שוליים פנימיים של חלונות
- צפיות: הצגת תוכן מקצה לקצה בתצוגות
- הגדרה: שינויים בהתנהגות: אפליקציות שמטרגטות ל-Android 15 ואילך
איך מבצעים אופטימיזציה של אפליקציות
כדי להימנע מהבעיה הזו, צריך להפעיל באפליקציה תצוגה מקצה לקצה או לטרגט לרמת API 35 ומעלה.
איך משביתים את ההגדרה 'שינוי הגדרות ברירת המחדל' או מבטלים את ההסכמה לשימוש בה
מפעילים תצוגה מקצה לקצה או מטמיעים רמת API 35 ומעלה.
דגלי נכס לשינוי ברירת המחדל
ללא.
פקודות adb לבדיקת ביטול
כדי להחיל את הביטול:
adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>
כדי להסיר את שינוי ברירת המחדל:
adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>
הערה: הפקודות רק מחילות או מסירות את שינוי ברירת המחדל באופן זמני.
מקורות מידע נוספים
- הנחיות בנושא איכות אפליקציות למסכים גדולים
- הנחיות בנושא איכות ליבה של אפליקציות
-
בעלי מכשיר וירטואלי הם אפליקציות מהימנות או בעלות הרשאות שמנהלות מכשיר וירטואלי. בעלי מכשירים וירטואליים יוצרים מכשירים וירטואליים כדי להציג אפליקציות, ואז מקרינים את האפליקציות למכשירים מרוחקים, כמו מחשבים אישיים, מכשירי מציאות מדומה או מערכות מידע ובידור ברכב. הבעלים של המכשיר הווירטואלי נמצא במכשיר מקומי, כמו טלפון. ↩