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

מערכת 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 ‏33) נוסף דיאלוג להדרכת המשתמשים לגבי מיקום האפליקציה עם הפסים השחורים במסך או הכללת הפסים השחורים במצב מסך מפוצל:

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

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

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

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

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

בעיה

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

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

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

אופטימיזציה

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

בעיה

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

אופטימיזציה

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

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

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

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

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

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

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

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

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

שינוי הגודל

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

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

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

בפורמט 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>

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

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

OVERRIDE_MOUSE_TO_TOUCH

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

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

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

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

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

איך משביתים את ההחלפה או מבטלים את ההסכמה להחלפה

מצהירים על FEATURE_PC ברכיב <uses-feature> במניפסט של האפליקציה.

<uses-feature android:name="android.hardware.type.pc"
              android:required="false" />

הערה: צריך להגדיר את android:required="false" כך שהתכונה במחשב תהיה אופציונלית, ו-Google Play לא יחריג את האפליקציה במכשירים שהם לא מחשבים.

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

ללא.

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

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

adb shell am compat enable OVERRIDE_MOUSE_TO_TOUCH <package>

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

adb shell am compat disable OVERRIDE_MOUSE_TO_TOUCH <package>

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

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_SIMULATE_REQUESTED_ORIENTATION

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

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

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

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

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

איך משביתים את ההחלפה או מבטלים את ההסכמה להחלפה

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

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

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

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

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

adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <package>

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

adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_SIMULATE_REQUESTED_ORIENTATION <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 ואילך ולייצא מחדש את המשחק. מסמנים את האפשרות חלון שניתן לשינוי גודל בהגדרות של 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. בעלי מכשיר וירטואלי הם אפליקציות מהימנות או בעלות הרשאות שמנהלות מכשיר וירטואלי. בעלי מכשירים וירטואליים יוצרים מכשירים וירטואליים כדי להציג אפליקציות, ואז מקרינים את האפליקציות למכשירים מרוחקים, כמו מחשבים אישיים, מכשירי מציאות מדומה או מערכות מידע ובידור ברכב. הבעלים של המכשיר הווירטואלי נמצא במכשיר מקומי, כמו טלפון.