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

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

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

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

אופטימיזציה

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

פתרון עקיף לתאימות

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

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

ב-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() ב-method של הפעילות 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 מצוין שחיישן התמונה של המצלמה "חייב להיות בכיוון שבו הממד הארוך של המצלמה תואם לממד הארוך של המסך".

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

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

אופטימיזציה

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

פתרון עקיף לתאימות

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

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

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

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

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

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

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

חשוב לוודא שהפעילויות שמפעילות פעילויות של תיבת דו-שיח יהיו גלויות עד שהמשתמש יגיב לתיבת הדו-שיח.

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

  • מצב תאימות לגודל
  • כיוון
  • יחס גובה-רוחב

משחקים ב-Unity

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

בעיה

ב-Unity 2019.4 נוספה האפשרות Resizable Window לתמיכה במצב חלונות מרובים ב-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 אין השפעה.

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

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

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

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

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

אפשר גם להשתמש בגשר לניפוי באגים ב-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 שינוי מברירת המחדל של Gatekeeper שצריך להפעיל כדי להחיל שינויים אחרים ביחס גובה-רוחב.
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_REQUESTED_ORIENTATION 254631730 התעלמות מבקשות של האפליקציה לגבי כיוון המסך כדי למנוע לולאות אינסופיות של רוטציה.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 התעלמות מבקשות חוזרות לכיוון המסך בזמן הפעלה מחדש של פעילות. אם מערכת Android מזהה שאפליקציה מבקשת לפחות שתי כיוונים חדשים בתוך שנייה אחת, המערכת מתייחסת לכך כאל לולאה אינסופית של רוטציה ומחילה את שינוי הערך.
OVERRIDE_RESPECT_ISSUE_ORIENTATION 236283604 ההגדרה של בקשת הכיוון מתעלמת מההגדרה של בקשת הכיוון שלא תופסת בפורמט letterbox.
ממשקי API של Sandbox NEVER_SANDBOX_DISPLAY_APIS 184838306 המדיניות מונעת שינוי של ההתנהגות של ממשקי API לרשת המדיה.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 מאלץ את ממשקי ה-API של Display באפליקציה להחזיר את גבולות האפליקציה. ממשקי API של Display מחזירים גבולות לוגיים של אזור התצוגה, אבל לפעמים האפליקציה מניחה שממשקי ה-API של Display מחזירים את גבולות האפליקציה, מה שמוביל לבעיות בממשק המשתמש.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 מאלץ את ממשקי ה-API של View שמשמשים באפליקציה להחזיר את גבולות האפליקציה. ממשקי API של View מחזירים גבולות לוגיים של אזור התצוגה, אבל לפעמים האפליקציה מניחה שממשקי ה-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, או כדי לאפשר שינוי גודל בזמן השבתה של מצב ריבוי חלונות באמצעות 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 ברמת הפעילות או האפליקציה.

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

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

מפעילה את הכיוון 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

ההגדרה מאלצת חבילות שאף פעם לא מיושמת בארגז חול (sandboxing) של Display API בפעילות עם פורמט letterbox או במצב תאימות לגודל. ממשקי ה-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

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

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

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