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

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

בעיה

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

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

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

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

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

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

אופטימיזציה

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

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

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

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

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

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

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

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

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

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

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

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

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

מצב תאימות לגודל הוא 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.

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

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

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

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

בעיה

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

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

בעיה

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

אופטימיזציה

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

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

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

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

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

תיבות הדו-שיח של ההרשאות לא ממלאות את שטח התצוגה הזמין כי פריסת תיבת הדו-שיח משתמשת בדרך כלל ב-LayoutParams.WRAP_CONTENT ולא ב-LayoutParams.MATCH_PARENT.

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

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

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

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

משחקי Unity

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

בעיה

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

אופטימיזציה

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

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

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

ממשק מחשב

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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