מצב תאימות מכשיר

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

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

מכשירים להתייחסות

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

  • טאבלטים: הכיוון הטבעי של חלק מהטאבלטים, כמו Pixel Tablet, הוא לרוחב. המכשיר נמצא בכיוון הטבעי שלו כאשר אפשרות החזרה במחיר Display#getRotation() Surface.ROTATION_0 אם האפליקציות מניחות שהאורך של ROTATION_0 הוא לאורך, יכול להיות שפריסות האפליקציה והתצוגה המקדימה של המצלמה לא יהיו תואמות לתצוגה של המכשיר.
  • מכשירים מתקפלים לרוחב: חלק מהמכשירים המתקפלים, כמו Pixel Fold, נמצאים כיוון לאורך כשהמכשיר מקופל, אבל כיוון לרוחב כשהוא מקופל. אם האפליקציות מניחות שהכיוון הלא מקופל הוא לאורך, הבהוב עשויות להיות בעיות בפריסה בלולאות או בפריסה.
  • טלפונים מתקפלים: טלפונים לא מתקפלים מופיעים בדרך כלל בפריסה לאורך לכיוון מסוים. אבל, כשהמכשיר מקופל, בדרך כלל יש מסך קטן כיוון לרוחב. האפליקציות חייבות לזהות את הפרטים הבאים ולהתאים אותם אישית של המסכים.

בעיות תאימות נפוצות

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

Letterboxing חפשו את המטמון

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

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

איור 1. האפליקציה מוגבלת לכיוון תצוגה לאורך בפורמט letterbox בטאבלט לרוחב ומתקפל.

בעיה

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

הגדרות התצורה ששולטות בכיוון וביכולת ההצגה של האפליקציה כוללות את הבאים:

  • screenOrientation: מציין כיוון קבוע של אפליקציה. אפליקציות יכולות גם להגדיר את הכיוון בזמן ריצה באמצעות Activity#setRequestedOrientation()

  • resizeableActivity: מציין אם המערכת יכולה לשנות את גודל האפליקציות כך שיתאימו לחלונות במידות שונות. ב-Android 11 (רמת API) 30) ומטה, מציין אם אפליקציות תומכות במצב ריבוי חלונות. במצב מופעל Android 12 (רמת API 31) ואילך, מציין אם אפליקציות תומכות מצב ריבוי חלונות במסכים קטנים (קומפקטי סיווג גודל החלון). ב-Android מגרסה 12 ואילך, אפליקציות תמיכה במצב ריבוי חלונות במסכים גדולים (חלון בינוני או מורחב size class)) ללא קשר להגדרה הזו.

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

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

אופטימיזציה

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

פתרון זמני לתאימות

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

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

ב-Android 12 (רמת API 31) נוספו שיפורי האסתטיקה הבאים, ניתנים להגדרה על ידי יצרני מכשירים:

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

איור 2. אפליקציה בפורמט letterbox עם שיפורים בממשק המשתמש.

12L (רמת API 32) מוסיפה את שיפורי הפונקציונליות הבאים:

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

  • לחצן עיצוב מחדש להפעלה מחדש: יצרני המכשירים יכולים להפעיל מחדש את המכשיר לחצן למצב תאימות גודל מראה חדש לשיפור הזיהוי של המשתמשים.

מערכת Android 13 (רמת API 33) מוסיפה תיבת דו-שיח עם הסבר למשתמש לגבי מיקום אפליקציה בפורמט letterbox שמוצג במסך או כולל תיבת letterbox במצב מסך מפוצל:

איור 3. אפליקציה עם פורמט letterbox, תיבת דו-שיח להסבר למשתמש.

מצב תאימות לגודל

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

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

  • סיבוב המכשיר
  • מכשירים מתקפלים – מתקפל או לא מתקפל
  • מעבר בין מצב מסך מלא למצב תצוגה במסך מפוצל

בעיה

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

האפליקציה נחשבת שאפשר לשנות את הגודל שלה, והיא לא תוקצה לגודל מצב תאימות — אם הוא עומד באחד מהקריטריונים הבאים:

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

אופטימיזציה

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

פתרון זמני לתאימות

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

לולאות מהבהבות

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

בעיה

בגרסה 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() בקטע פעילות onCreate() כי בקשת הכיוון יכולה להיות הופעלה באופן בלתי צפוי על ידי שינויי הגדרות שלא טופלו
  • צריך להניח שהכיוון הטבעי של המכשיר (ROTATION_0) הוא לאורך
  • מגדירים את הכיוון לפי אותות שלא קשורים לגודל החלון הנוכחי, בתור Display#getRotation(), נוכחות של FoldingFeature, או ממשקי API שהוצאו משימוש.

פתרון זמני לתאימות

מערכת Android מתעלמת משיחות אל Activity#setRequestedOrientation() במקרים הבאים מצבים:

  • הפעילות כבר הופעלה מחדש מקריאה קודמת ל-method, או טיפול בכוח הסיבוב של תאימות המצלמה הופעל (ראו מצלמה) תצוגה מקדימה שבהמשך).

    יצרני מכשירים יכולים להחיל את ההתנהגות הזו על אפליקציה עם 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 מאלץ מסובב את האפליקציה כדי להתאים את חלון האפליקציה לאורך לכיוון המכשיר.

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

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

  • חיתוך מצלמה קדמית פנימית: חיישן המצלמה הפנימי הפנימי בחלק מהמצלמות מכשירים מתקפלים מכוונים לרוחב. בנוסף לביצוע סיבוב כוח של תצוגה מקדימה של המצלמה במסך הפנימי המתקפל, 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 על סמך WindowMetrics, כולל ממשקי API של WindowManager:

פתרון זמני לתאימות

שני שינויים משנים את ממשקי ה-API של Display שהוצאו משימוש ונעשה בהם שימוש לרעה בממשקי ה-API של View להחזיר את גבולות האפליקציה: ALWAYS_SANDBOX_DISPLAY_APIS לDisplay ממשקי API; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS ל-View ממשקי API. 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 (פעילות שמפעילה פעילות אחרת ולאחר מכן נעלמת) וגם כך שהמערכת לא יכולה לקבוע את גבולות הפעילות של הטרמפולינה הושקה הפעילות של תיבת הדו-שיח עם הרשאה שקופה.

אופטימיזציה

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

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

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

פינות מעוגלות

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

תיבות הדו-שיח של ההרשאות לא ממלאות את שטח התצוגה הזמין כי תיבת הדו-שיח הפריסה משתמשת בדרך כלל ב-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 שינוי מברירת המחדל לכל אפליקציה כדי לספק אירוע מזויף של מיקוד לאפליקציה שנמצאת מצב ריבוי חלונות. הביטול מאפשר לפעילות לצייר מחדש את התוכן אסור להסתיר.

בדיקת האפליקציה לאיתור בעיות תאימות

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

בפורמט letterbox

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

Kotlin

fun Activity.isLetterboxed() : 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(Activity 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();
}

לאחר מכן צריך להריץ בדיקה כדי להצהיר על ההתנהגות ולוודא שפעילות היעד לא בפורמט letterbox:

Kotlin

@get:Rule
val activityRule = ActivityScenarioRule(MainActivity::class.java)

@Test
fun activity_launched_notLetterBoxed() {
    activityRule.scenario.onActivity {
        assertThat(it.isLetterboxed()).isFalse()
    }
}

Java

@Rule
public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class);

public void activity_launched_notLetterBoxed() {
    try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) {
        scenario.onActivity(activity -> {
            assertThat(isLetterboxed(activity)).isFalse();
        });
    }
}

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

שינויים מברירת המחדל לפי אפליקציה

ב-Android יש שינויים שמשנים את אופן הפעולה המוגדר של אפליקציות. עבור לדוגמה, הביטול FORCE_RESIZE_APP מורה על כדי לעקוף את מצב התאימות לגדלים ולשנות את גודל האפליקציה כך שתתאים לתצוגה גם אם resizeableActivity="false" שצוין בקובץ המניפסט של האפליקציה.

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

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

ב-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 אין השפעה.

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

שינויים מברירת המחדל של יצרן המכשיר לכל אפליקציה

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

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

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

אפשר גם להשתמש ב-Android Debug Bridge (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_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 מגדיר את התצוגה לכיוון קבוע לרוחב טבעי כשהמשימה מוצגת במסך מלא (כולל בפורמט letterbox).
OVERRIDE_ENABLE_COMPAT_IGNORE_HOWMANY_ORIENTATION 254631730 מתעלם מבקשות כיוון מהאפליקציה כדי להימנע מלולאות אינסופיות של סיבוב.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 מתעלם מבקשות חוזרות לשינוי כיוון במהלך הפעלה מחדש של פעילות. אם מערכת Android מזהה שהאפליקציה מבקשת לפחות שני כיוונים חדשים בתוך שנייה אחת, המערכת מחשיבה את זה בתור לולאה אינסופית ומחילה את השינוי מברירת המחדל.
OVERRIDE_RESPECT_ בחירה_ORIENTATION 236283604 ההגדרה של בקשת הכיוון מתעלמת מההגדרה של בקשת הכיוון שלא תופסת בפורמט letterbox.
ממשקי API של Sandbox NEVER_SANDBOX_DISPLAY_APIS 184838306 המדיניות מונעת שינוי של ההתנהגות של ממשקי API לרשת המדיה.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 מאלצת את ממשקי ה-API של Display באפליקציה להחזיר את גבולות האפליקציה. ממשקי API של Display מחזירים גבולות לוגיים של אזור התצוגה, אבל לפעמים האפליקציה יוצאת מנקודה הנחה ש-Display ממשקי API מחזירים גבולות לאפליקציה, דבר שמוביל לבעיות בממשק המשתמש.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 מאלצת את ממשקי ה-API של View שנמצאים בשימוש באפליקציה להחזיר גבולות אפליקציה. ממשקי API של View מחזירים גבולות לוגיים של אזור התצוגה, אבל לפעמים האפליקציה יוצאת מנקודה הנחה ש-View ממשקי API מחזירים גבולות לאפליקציה, דבר שמוביל לבעיות בממשק המשתמש.
תאימות למצלמה 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 או, תמיכה בשינוי הגודל בזמן השבתה של מצב ריבוי חלונות באמצעות android:resizeableActivity=false, הגדרת android.supports_size_changes סימון מטא-נתונים ל-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_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

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

איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל

ראו 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

ההגדרה הזו מפעילה את הביטולים הבאים כדי לבטל כל כיוון:

איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל

מגדירים את מאפיין המניפסט 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()

איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל

  • לא להגדיר את המניפסט 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

הפעלת כיוון להפוך לרוחב לכל הפעילויות ב החבילה. אלא אם כן 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_ רבים_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_ בחירה_ORIENTATION

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

איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל

לא ישים. צריך לפתור את הבעיה בלוגיקת האפליקציה.

איך מבצעים אופטימיזציה של אפליקציות

פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION.

איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל

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

דגלי מאפיינים שצריך לשנות

אין סימוני מאפיינים לשינוי הזה.

פקודות 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

כך המערכת מאלצת חבילות לעולם לא להחיל ארגז חול (Sandbox) של Display ל-API לפעילות של מצב letterbox או של תאימות לגודל. ממשקי ה-API של Display ימשיכו להציג את גבולות אזור התצוגה.

איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל

להצהיר על פעילויות שניתן לשנות את הגודל שלהן באמצעות אחת מהאפשרויות android:resizeableActivity מאפיין מניפסט ל-true או את דגל המטא-נתונים android.supports_size_changes אל true.

איך מבצעים אופטימיזציה של אפליקציות

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

איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל

אין אפשרות לבטל את ההסכמה. העברה מממשקי 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

אילוץ חבילות להחיל תמיד הרצה בארגז חול (Sandbox) של Display ל-API ללא קשר למצב עיבוד החלק הנצפה בלבד. ממשקי ה-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

כך מאלצים חבילות לגבולות הפעילות ב-Sandbox של ממשקי ה-API הבאים של View:

איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל

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

איך מבצעים אופטימיזציה של אפליקציות

המפתחים צריכים להשתמש בממשקי API של View כדי להביא בחשבון את האפשרות של פורמט letterbox ומצב ריבוי חלונות שמיושם באפליקציה. צפייה 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 רמה 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 ואילך. לייצא מחדש את המשחק. שמירת האפשרות Resizable Window ביצעת צ'ק-אין בנגן Android הגדרות.

איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל

הגדרת דגל המאפיין 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>

הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.

מקורות מידע נוספים