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

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

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

Android 16

‫Android 16 (רמת API‏ 36) מתעלמת מהגבלות על כיוון המסך, יחס הגובה-רוחב ושינוי הגודל של האפליקציה כדי לשפר את הפריסה של אפליקציות בגורמי צורה עם רוחב מינימלי של ‎600dp ומעלה.

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

ביטול ההסכמה

האפליקציה יכולה להיות מיועדת לרמת API‏ 36, אבל לא להשתמש בהתנהגות של Android 16. במקרה כזה, ההרשאה OVERRIDE_ANY_ORIENTATION_TO_USER לא רלוונטית.

הצהרה על מאפיין במניפסט

כדי לבטל את ההסכמה להתנהגות של API ברמה 36, מגדירים את מאפיין המניפסט PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY.

כדי לבטל את ההסכמה לפעילות ספציפית, מגדירים את המאפיין ברכיב <activity>:

<activity ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</activity>

כדי לבטל את ההסכמה לכל האפליקציה, מגדירים את המאפיין ברכיב <application>:

<application ...>
    <property
        android:name="android.window.PROPERTY_COMPAT_ALLOW_RESTRICTED_RESIZABILITY"
        android:value="true" />
    ...
</application>

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

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

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

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

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

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

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

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

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

בעיה

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

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

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

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

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

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

אופטימיזציה

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

בעיה

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

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

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

אופטימיזציה

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

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

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

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

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

מצב התאימות של התצוגה מופעל כברירת מחדל במשחקים (על סמך הדגל android:appCategory) כדי לשפר את היציבות וההמשכיות. בניגוד למצב תאימות לגודל, מצב תאימות לתצוגה לא מקפיא את ההגדרה של האפליקציה. האפליקציה עדיין יכולה לקבל את כל עדכוני ההגדרות דרך ממשקי API כמו הקריאה החוזרת (callback) של onConfigurationChanged(), אבל היא לא תופעל מחדש באופן שישבש את הפעילות. המשמעות היא שמשחקים שתומכים כראוי בממשקי API כמו onConfigurationChanged()‎ עדיין יכולים לעדכן את ממשק המשתמש שלהם בצורה רספונסיבית, גם אם הם במצב תאימות לתצוגה.

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

<activity
    android:name=".MyGameActivity"
    android:configChanges="colorMode|touchscreen|density|...">
    ...
</activity>

לולאות מרצדות

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

בעיה

ב-Android 12 (רמת API‏ 31) ומעלה, יצרני מכשירים יכולים להגדיר את המכשירים שלהם כך שיתעלמו מהגבלות על כיוון המסך שצוינו באפליקציות, ובמקום זאת יאכפו מצבי תאימות. לדוגמה, מכשיר מתקפל יכול להתעלם מההגדרה android:screenOrientation="portrait" של פעילות מסוימת כשהפעילות מוצגת במסך הפנימי של המכשיר, בגודל של טאבלט במצב לרוחב.

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

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

אפליקציה בתצוגה לרוחב במסך פנימי של מכשיר מתקפל עשויה לבדוק את סיבוב המסך, לקבל ערך של ROTATION_0, להניח שהתצורה הטבעית של המכשיר היא לאורך ולקרוא לפונקציה setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT ) כדי להגדיר מחדש את פריסת האפליקציה. אחרי שהאפליקציה מופעלת מחדש (במצב לרוחב), יכול להיות שהיא שוב תבדוק את סיבוב המסך, תקבל ערך של ROTATION_0, תקרא לפונקציה setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) ותמשיך את הלולאה האינסופית.

אופטימיזציה

אפליקציות לא צריכות לבצע את הפעולות הבאות:

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

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

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

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

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

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

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

  • הבעלים של המכשיר הווירטואלי ביטלו את קריאת השיטה במכשירים נבחרים.

תצוגה מקדימה של המצלמה

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

בעיה

במסמך הגדרת התאימות של Android מצוין שחיישן תמונה של מצלמה "חייב להיות מכוון כך שהמימד הארוך של המצלמה יתאים למימד הארוך של המסך".

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

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

אופטימיזציה

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

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

מכשיר נמצא בכיוון טבעי כש-Display#getRotation() מחזיר Surface.ROTATION_0. המערכת מחשבת את CameraCharacteristics.SENSOR_ORIENTATION מתוך הכיוון הטבעי של המכשיר. מערכת Android מיישרת את חלון האפליקציה לאורך של אפליקציות שמוגבלות לאורך עם הכיוון הטבעי של המכשיר, שזה מה שרוב האפליקציות מצפות לו. בנוסף, מערכת Android חותכת את התמונה מחיישן המצלמה כשהכיוון של החיישן הוא לרוחב והתצוגה המקדימה של המצלמה היא לאורך. הפתרונות הספציפיים כוללים את הפתרונות הבאים:

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

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

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

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

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

  • רענון בכוח של תצוגות מקדימות של המצלמה: המערכת עוברת בין שיטות הפעילות onStop() ו-onStart() (כברירת מחדל) או onPause() ו-onResume() (מוגדר על ידי OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE כהחלפה לכל אפליקציה) אחרי סיבוב בכוח כדי לוודא שהתצוגה המקדימה של המצלמה מוצגת בצורה תקינה.

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

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

ממשקי API שנעשה בהם שימוש לרעה

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

חלק מממשקי ה-API של View מיועדים למטרות מיוחדות שמפתחים לא תמיד מבינים.

בעיה

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

ממשקי API של רשת המדיה שהוצאו משימוש ונעשה בהם שימוש לרעה:

מידע נוסף זמין במאמר בנושא תמיכה במצב מרובה חלונות.

ממשקי API של תצוגות שנעשה בהם שימוש לרעה:

אופטימיזציה

אל תסתמכו אף פעם על הגודל הפיזי של המסך כדי למקם רכיבי ממשק משתמש. מעבירים את האפליקציה לממשקי API שמבוססים על 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 הוסיפה אפשרות Resizable Window ב-Unity 2019.4 כדי לתמוך במצב מרובה חלונות ב-Android. עם זאת, ההטמעה הראשונית לא הגיבה בצורה נכונה למחזור החיים של הפעילות במצב מרובה חלונות, ולכן UnityPlayer השהה את ההפעלה כשהאפליקציה איבדה את המיקוד. הנגן הציג מסך שחור או את הפריים האחרון של המשחק, שהיה קפוא. המשחק ימשיך רק אם המשתמש יקיש על המסך. אפליקציות רבות שמשתמשות במנוע Unity נתקלות בבעיה הזו ומוצגות כחלון שחור במצב ריבוי חלונות.

אופטימיזציה

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

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

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

שינוי דינמי של חלונות במחשב

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

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

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

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

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

תצוגה מקדימה של המצלמה בחלונות במחשב

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

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

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

בפורמט letterbox

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

Kotlin

fun isLetterboxed(activity: AppCompatActivity): Boolean {
    if (isInMultiWindowMode) return false

    val wmc = WindowMetricsCalculator.getOrCreate()
    val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds
    val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds

    val isScreenPortrait = maxBounds.height() > maxBounds.width()

    return if (isScreenPortrait) {
        currentBounds.height() < maxBounds.height()
    } else {
        currentBounds.width() < maxBounds.width()
    }
}

Java

public boolean isLetterboxed(AppCompatActivity activity) {
    if (activity.isInMultiWindowMode()) {
        return false;
    }

    WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate();
    Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds();
    Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds();

    boolean isScreenPortrait = maxBounds.height() > maxBounds.width();

    return (isScreenPortrait)
        ? currentBounds.height() < maxBounds.height()
        : currentBounds.width() < maxBounds.width();
}

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

Kotlin

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

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

Java

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

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

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

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

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

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

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

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

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

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

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE

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

    <application>
        <property
            android:name="android.window.
            PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE"
            android:value="false" />
    </application>
    

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

    הגדרת המאפיין לערך true לא משפיעה על כלום.

  • PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE

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

    <application>
        <property
            android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE"
            android:value="false" />
    </application>
    

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

    הגדרת המאפיין הזה ל-true לא משפיעה.

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

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

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

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

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

אפשר גם להשתמש בממשק הגישור של Android‏ (adb) כדי להפעיל או להשבית שינויים ולבדוק אילו שינויים חלים על האפליקציה.

כדי להפעיל או להשבית את ההגדרות שמוגדרות מראש:

adb shell am compat enable/disable <override name/id> <package>

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

adb shell dumpsys platform_compat | grep <package name>

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

שינויים מברירת המחדל של המערכת לכל אפליקציה
סוג שם מזהה תיאור
יכולת שינוי הגודל FORCE_RESIZE_APP 174042936 עוקף את מצב התאימות לגודל האפליקציה בשינויים בהגדרות.
FORCE_NON_RESIZE_APP 181136395 האפליקציה נאלצת לעבור למצב תאימות לגודל הדף בשינויים בהגדרות.
יחס גובה-רוחב OVERRIDE_MIN_ASPECT_RATIO 174042980 הגדרה לביטול מסנן השיחות שצריך להפעיל כדי להחיל ביטולים אחרים של יחס גובה-רוחב.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY 203647190 אם ההגדרה הזו מופעלת (ברירת המחדל), המגבלות חלות על פעילויות שמוצגות רק במצב אנכי.
OVERRIDE_MIN_ASPECT_RATIO_SMALL 349045028 משנה את יחס הגובה-רוחב המינימלי ל-4:3.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM 180326845 משנה את יחס הגובה-רוחב המינימלי ל-3:2.
OVERRIDE_MIN_ASPECT_RATIO_LARGE 180326787 השינוי של יחס הגובה-רוחב המינימלי ל-16:9.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN 208648326 משנה את יחס הגובה-רוחב המינימלי כך שיתאים ל-50% מגודל התצוגה (או ליחס הגובה-רוחב של המסך המפוצל).
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN 218959984 ההגדרה הזו משביתה את שינוי יחס הגובה-רוחב המינימלי, כך שהאפליקציות יוצגו במסך מלא כשהמכשיר במצב אנכי.
כיוון OVERRIDE_ANY_ORIENTATION 265464455 הגדרה שמאפשרת לשנות את הכיוון.
OVERRIDE_ANY_ORIENTATION_TO_USER 310816437 ההגדרה הזו מבטלת את ההגבלות על הכיוון, על שינוי הגודל ועל יחס הגובה-רוחב.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT 265452344 ההגדרה הזו מאפשרת לשנות את הכיוון לאורך כשלא מוגדר כיוון לפעילות.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR 265451093 מבטל את הכיוון ומשתמש בכיוון הטבעי של המכשיר (nosensor) כשאין כיוון מוגדר לפעילות.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE 266124927 מסובב אפליקציות שפועלות רק במצב לרוחב ב-180 מעלות.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA 265456536 ההגדרה הזו מגבילה את היקף השימוש בשינוי הכיוון למקרים שבהם האפליקציה מחוברת למצלמה.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION 255940284 ההגדרה הזו קובעת שהתצוגה תהיה קבועה לרוחב כשהמשימה במסך מלא (כולל כשהיא מוצגת עם פסי שוליים).
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION 254631730 המערכת מתעלמת מבקשות של האפליקציה לגבי כיוון המסך כדי למנוע לולאות אינסופיות של סיבוב המסך.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED 273509367 מתעלם מבקשות חוזרות לשינוי הכיוון בזמן שהפעילות מופעלת מחדש. אם מערכת Android מזהה שאפליקציה מבקשת לפחות שני כיוונים חדשים בתוך שנייה אחת, המערכת מחשיבה את זה כלולאה אינסופית של סיבובים ומחיל את הביטול.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION 236283604 ההגדרה הזו מונעת הצגת פסים שחורים בצדדים על ידי השבתת ההגדרה 'התעלמות מבקשת כיוון' של יצרן המכשיר.
ממשקי API של ארגז חול NEVER_SANDBOX_DISPLAY_APIS 184838306 מונע שינוי בהתנהגות של ממשקי API לתצוגה.
ALWAYS_SANDBOX_DISPLAY_APIS 185004937 האפשרות הזו גורמת לממשקי ה-API של Display באפליקציה להחזיר את גבולות האפליקציה. ‫Display ממשקי API מחזירים גבולות של אזור תצוגה לוגי, אבל לפעמים האפליקציה מניחה שממשקי API מחזירים גבולות של אפליקציה, מה שמוביל לבעיות בממשק המשתמש.Display
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS 237531167 האפשרות הזו מאלצת את ממשקי ה-API של View שבהם נעשה שימוש באפליקציה להחזיר את גבולות האפליקציה. ‫View ממשקי API מחזירים גבולות של אזור תצוגה לוגי, אבל לפעמים האפליקציה מניחה שממשקי API מחזירים גבולות של אפליקציה, מה שמוביל לבעיות בממשק המשתמש.View
תאימות המצלמה OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION 263959004 משבית את סיבוב המסך. כברירת מחדל, כל אפליקציות המצלמה עם אוריינטציה קבועה מסובבות בכוח כשהתצוגה המקדימה של המצלמה פתוחה.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH 264304459 מסירה את הרענון הקשיח שמוחל כברירת מחדל כשמבצעים סיבוב בכוח של תצוגה מקדימה של המצלמה.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE 264301586 המעבר מרענון קשיח לרענון רך כשמבצעים סיבוב בכוח של תצוגה מקדימה של מצלמה, מה שעוזר לשמר את המצב במהלך הסיבוב בכוח. כברירת מחדל, מערכת Android מבצעת רענון מלא כשמבצעים סיבוב בכוח של התצוגה המקדימה של המצלמה. רענון מלא עלול לגרום לבעיות באפליקציות, כמו איבוד הנתונים או מסך שחור, בהתאם לאופן שבו האפליקציות שמרו במטמון את הנתונים הקודמים.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT 250678880 חיתוך של מאגר התמונות של המצלמה הקדמית הפנימית. אם ההגדרה מושבתת, החיתוך של המצלמה הקדמית הפנימית מוסר ושדה הראייה של התצוגה המקדימה של המצלמה גדל. במכשירי מסך מתקפל מסוימים (ראו מכשירי ייחוס), המערכת חותכת את התצוגה המקדימה של המצלמה בכל אפליקציות המצלמה כשמשתמשים במצלמה הקדמית הפנימית.
שונות OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS 263259275 מונעת את ההשחרה של האפליקציה כשהיא מאבדת את המיקוד במצב מסך מפוצל. האפליקציה ממתינה למיקוד לפני שהיא מציירת את התוכן שלה, מה שעלול לגרום להקפאה או להשחרה של האפליקציה. ההחלפה מאפשרת ל-Android לשלוח לאפליקציה אירוע מיקוד מזויף, שמאותת לאפליקציה להתחיל לצייר תוכן שוב.

FORCE_RESIZE_APP

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

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

במניפסט של האפליקציה, מגדירים את מאפיין android:resizeableActivity לערך true.

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

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

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את העקיפה ולאפשר שינוי גודל של האפליקציה:

adb shell am compat enable FORCE_RESIZE_APP <package>

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

adb shell am compat disable FORCE_RESIZE_APP <package>

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

FORCE_NON_RESIZE_APP

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

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

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

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

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

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

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

adb shell am compat enable FORCE_NON_RESIZE_APP <package>

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

adb shell am compat disable FORCE_NON_RESIZE_APP <package>

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

OVERRIDE_MIN_ASPECT_RATIO

השומר של כל ההחלפות שמכריחות יחס גובה-רוחב מינימלי נתון.

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

מגדירים את android:minAspectRatio ברמת הפעילות או ברמת האפליקציה.

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

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

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

מציינים הגבלה על יחס גובה-רוחב או מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
  android:value="false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>

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

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>

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

OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY

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

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

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

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>

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

OVERRIDE_MIN_ASPECT_RATIO_SMALL

הגדרת יחס הגובה-רוחב המינימלי של הפעילות לערך קטן (4:3).

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

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

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_SMALL <package>

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

OVERRIDE_MIN_ASPECT_RATIO_MEDIUM

הגדרת יחס הגובה-רוחב המינימלי של הפעילות לערך בינוני (3:2).

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

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

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>

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

OVERRIDE_MIN_ASPECT_RATIO_LARGE

הגדרת יחס הגובה-רוחב המינימלי של הפעילות לערך גדול (16:9).

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>

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

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`

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

OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN

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

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

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

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>

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

OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN

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

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף זמין במאמר בנושא OVERRIDE_MIN_ASPECT_RATIO.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

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

adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>

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

OVERRIDE_ANY_ORIENTATION

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

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

מגדירים את מאפיין המניפסט activity:screenOrientation או משתמשים ב-API‏ Activity#setRequestedOrientation().

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

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

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>

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

adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>

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

OVERRIDE_ANY_ORIENTATION_TO_USER

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

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

  • לא מגדירים את מאפיין המניפסט android:screenOrientation או מגדירים את המאפיין לערך "user".

  • מגדירים את מאפיין המניפסט android:resizeableActivity לערך true.

  • במסכים קטנים, כדי לתמוך בשינוי גודל האפליקציה תוך השבתת מצב ריבוי חלונות באמצעות android:resizeableActivity=false, צריך להגדיר את דגל המטא-נתונים android.supports_size_changes לערך true. לא מגדירים את minAspectRatio ואת maxAspectRatio.

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

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

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

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

adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>

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

OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT

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

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

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

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>

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

OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR

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

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

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

adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>

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

OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE

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

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

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

adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>

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

OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA

ההגדרות של המגבלות OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, ושל OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE יחולו רק כשהחיבור למצלמה פעיל.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

דגלי נכס לשינוי ברירת המחדל

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

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

adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>

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

OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION

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

  • הפעילות מוצגת במסך מלא
  • המאפיין של רכיב הביטול PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE לא מופעל
  • ההגדרה 'התעלמות מבקשת כיוון' של יצרן המכשיר מופעלת עבור המסך
  • כיוון התצוגה הטבעי הוא לרוחב

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

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

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

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

adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>

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

OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION

ההגדרה הזו מפעילה מדיניות תאימות שמדלגת על עדכון של כיוון האפליקציה בתגובה לקריאה של האפליקציה אל Activity#setRequestedOrientation() כשהאפליקציה מופעלת מחדש או שיש לה טיפול פעיל בתאימות למצלמה.

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION לערך true.

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

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

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>

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

OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED

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

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

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

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
  android:value="false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

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

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>

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

OVERRIDE_RESPECT_REQUESTED_ORIENTATION

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

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

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

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

מידע נוסף מפורט בOVERRIDE_ANY_ORIENTATION.

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

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

דגלי נכס לשינוי ברירת המחדל

לא הוגדרו דגלי נכס לשינוי הזה.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

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

adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>

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

NEVER_SANDBOX_DISPLAY_APIS

האפשרות הזו מאלצת את החבילות אף פעם לא להחיל ארגז חול של Display API על פעילות במצב של תאימות לגודל או במצב של תאימות לתיבת מכתב. ממשקי ה-API‏ Display ממשיכים לספק את גבולות אזור התצוגה.

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

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

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

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

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

אי אפשר לבטל את ההסכמה. מעבר מממשקי API שהוצאו משימוש.

דגלי נכס לשינוי ברירת המחדל

לא הוגדרו דגלי נכס לשינוי הזה.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>

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

adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>

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

ALWAYS_SANDBOX_DISPLAY_APIS

ההגדרה הזו מאלצת את החבילות להחיל תמיד ארגז חול של API‏ Display ללא קשר למצב החלון. ממשקי ה-API של Display תמיד מספקים את גבולות האפליקציה.

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

כדי להצהיר שאי אפשר לשנות את הגודל של פעילויות, מגדירים את המאפיין android:resizeableActivity לערך false או את דגל המטא-נתונים android.supports_size_changes לערך false.

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

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

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

אי אפשר לבטל את ההסכמה. מעבר מממשקי API שהוצאו משימוש.

דגלי נכס לשינוי ברירת המחדל

לא הוגדרו דגלי נכס לשינוי הזה.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>

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

adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>

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

OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS

הפקודה מאלצת את החבילות להפעיל את ממשקי ה-API הבאים של View בארגז חול בהתאם לגבולות הפעילות:

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

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

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

אפליקציות צריכות להשתמש בממשקי API של View, תוך התחשבות באפשרות של הוספת מסגרת שחורה (letterboxing) והפעלת מצב ריבוי חלונות באפליקציה. מידע נוסף זמין במאמר WindowMetricsCalculator.

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
  android:value="false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

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

adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>

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

OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION

משבית את הסיבוב הכפוי. שיפור חוויית המשתמש באפליקציות מסוימות.

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

מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION לערך false.

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

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

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

מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION לערך true.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את העקיפה, שמסירה את סיבוב המסך:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

כדי להסיר את הביטול ולאפשר את סיבוב המסך:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>

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

OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH

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

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

מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH לערך false.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

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

מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH לערך true.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול, שמסיר את רענון הפעילות:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

כדי להסיר את שינוי ברירת המחדל, וכך לאפשר רענון של הפעילות:

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>

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

OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE

ההגדרה הזו גורמת לכך שהחבילות שאליהן היא מוחלת יבצעו רענון פעילות באמצעות מחזור של onResume()onPause()onResume() ולא באמצעות מחזור של onResume()onStop()onResume() אחרי סיבוב מאולץ של תאימות המצלמה.

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

מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE לערך true.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

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

מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

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

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>

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

OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT

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

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT לערך true.

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

מידע נוסף זמין במאמר בנושא OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את ההחלפה, שכוללת חיתוך של המצלמה הקדמית הפנימית:

adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

כדי להסיר את השינוי, וכך להסיר את החיתוך של המצלמה הקדמית הפנימית:

adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>

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

OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION

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

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

מאפשרת את התנהגות ברירת המחדל של הקרנת מדיה (שמוטמעת ב-Android 14, API level 34, עם createScreenCaptureIntent()), שמאפשרת למשתמשים להחליט אם לשתף את המסך המלא או חלון של אפליקציה אחת, ללא קשר למצב החלון. אפשר גם להתקשר למספר createScreenCaptureIntent(MediaProjectionConfig) עם ארגומנט MediaProjectionConfig שמוחזר מקריאה אל createConfigForUserChoice().

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

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

כדי לתמוך במצב מרובה חלונות, צריך לאפשר שינוי גודל של האפליקציה (resizeableActivity="true").

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

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

דגלי נכס לשינוי ברירת המחדל

ללא.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול, שמבטל את ביטול ההסכמה של האפליקציה לשיתוף מסך חלקי (כלומר, מפעיל שיתוף מסך חלקי):

adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

כדי להסיר את הביטול, שמאפשר לאפליקציה לבטל את השיתוף של חלק מהמסך:

adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>

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

OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS

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

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_ENABLE_FAKE_FOCUS לערך true.

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

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

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

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

מגדירים את דגל המאפיין PROPERTY_COMPAT_ENABLE_FAKE_FOCUS לערך false.

דגלי נכס לשינוי ברירת המחדל

<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
  android:value="true|false"/>

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

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

adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>

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

OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS

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

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

מפעילים תצוגה מקצה לקצה או מעדכנים את ה-SDK לטירגוט של האפליקציה לרמת API‏ 35 ומעלה. תוכלו לעיין במקורות המידע הבאים:

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

כדי להימנע מהבעיה הזו, צריך להפעיל באפליקציה תצוגה מקצה לקצה או לטרגט לרמת API 35 ומעלה.

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

מפעילים תצוגה מקצה לקצה או מטמיעים רמת API‏ 35 ומעלה.

דגלי נכס לשינוי ברירת המחדל

ללא.

פקודות adb לבדיקת ביטול

כדי להחיל את הביטול:

adb shell am compat enable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

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

adb shell am compat disable OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS <package>

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

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


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