מערכת Android מפעילה מצב תאימות לאפליקציות עם הצהרה על הכיוון או הגבלות על אפשרות ההצגה. מצב התאימות מבטיח התנהגות סבירה של האפליקציה ב מכשירים עם מסך גדול וטלפונים מתקפלים מצד שלישי, אבל עם נוחות השימוש לא אופטימלית.
שינויים לפי אפליקציות מאפשרים ליצרני המכשירים לבצע שינויים התנהגות של אפליקציות כדי לשפר את חוויית המשתמש או למנוע הפעלה של אפליקציות במכשירים מסוימים.
מכשירים להתייחסות
במכשירים הבאים ייתכן שיהיה צורך לשנות את ההגדרות לכל אפליקציה עקב חריגה מערכי הגדרות אישיות או תצורות שהאפליקציות שלהם לא תומכות בהם כמו שצריך:
- טאבלטים: הכיוון הטבעי של חלק מהטאבלטים, כמו Pixel Tablet,
הוא לרוחב. המכשיר נמצא בכיוון הטבעי שלו כאשר
אפשרות החזרה במחיר
Display#getRotation()
Surface.ROTATION_0
אם האפליקציות מניחות שהאורך שלROTATION_0
הוא לאורך, יכול להיות שפריסות האפליקציה והתצוגה המקדימה של המצלמה לא יהיו תואמות לתצוגה של המכשיר. - מכשירים מתקפלים לרוחב: חלק מהמכשירים המתקפלים, כמו Pixel Fold, נמצאים כיוון לאורך כאשר מקופל, אבל כיוון לרוחב כאשר הוא מקופל. אם האפליקציות מניחות שהכיוון הלא מקופל הוא לאורך, הבהוב לולאות או סביר להניח שיש בעיות בפריסה.
- טלפונים מתקפלים: טלפונים לא מתקפלים מופיעים בדרך כלל בפריסה לאורך לכיוון מסוים. אבל, כשהמכשיר מקופל, בדרך כלל יש מסך קטן כיוון לרוחב. האפליקציות חייבות לזהות את הפרטים הבאים ולהתאים אותם אישית את הכיוונים של המסכים.
בעיות תאימות נפוצות
בעיות תאימות באפליקציות מתרחשות בתדירות הגבוהה ביותר בגלל כיוון האפליקציה הגבלות, מידות רוחב ויחס גובה-רוחב, טיפול שגוי כיוון התצוגה המקדימה של המצלמה ושימוש לרעה בממשקי API.
Letterboxing חפשו את המטמון
פורמט letterbox ממקם את האפליקציה במרכז המסך או, במסכים גדולים, כדי לאפשר גישה נוחה. מאטים (פסים בצבע אחיד או טפט מטושטש) ממלאים את אזור התצוגה שלא נמצא בשימוש לאורך הצדדים או החלק העליון, בחלק התחתון של האפליקציה.
תוכן בפורמט letterbox קורה לעיתים קרובות במכשירים עם מסך גדול, מפני שהמאפיינים יחס הגובה-רוחב של צג המכשיר בדרך כלל שונה מיחס הגובה-רוחב של טלפונים, שרוב האפליקציות תוכננו עבורם.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/letterboxing.png?authuser=9&hl=he)
איור 1. האפליקציה מוגבלת לכיוון תצוגה לאורך בפורמט letterbox בטאבלט לרוחב ומתקפל.
בעיה
האפליקציה לא תומכת בכל הגדרות התצוגה כי האפליקציה תוקנה כיוון, יחס גובה-רוחב קבוע או שאינו ניתן לשינוי גודל.
הגדרות התצורה ששולטות בכיוון וביכולת ההצגה של האפליקציה כוללות את הבאים:
screenOrientation
: מציין כיוון קבוע של אפליקציה. אפליקציות יכולות גם להגדיר את הכיוון בזמן ריצה באמצעותActivity#setRequestedOrientation()
resizeableActivity
: מציין אם המערכת יכולה לשנות את גודל האפליקציות כך שיתאימו לחלונות במידות שונות. ב-Android 11 (רמת API) 30) ומטה, מציין אם אפליקציות תומכות במצב ריבוי חלונות. במצב מופעל Android 12 (רמת API 31) ואילך, מציין אם אפליקציות תומכות מצב ריבוי חלונות במסכים קטנים (קומפקטי סיווג גודל החלון). ב-Android מגרסה 12 ואילך, אפליקציות תמיכה במצב ריבוי חלונות במסכים גדולים (חלון בינוני או מורחב size class)) ללא קשר להגדרה הזו.maxAspectRatio
: ציון יחס הגובה-רוחב המקסימלי שנתמכות על ידי האפליקציה. רק אפליקציות שבהן האפשרותresizeableActivity
מוגדרת לערךfalse
יכולות מגדירים אתmaxAspectRatio
.minAspectRatio
: מציין את יחס הגובה-רוחב המינימלי שנתמכות על ידי האפליקציה. רק אפליקציות שבהן האפשרותresizeableActivity
מוגדרת לערךfalse
יכולות מגדירים אתminAspectRatio
.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/letterboxing_issue.png?authuser=9&hl=he)
אי אפשר להשתמש באפליקציה בפריסה לאורך.
אופטימיזציה
האפליקציה צריכה לתמוך בכל המכשירים ובמצב ריבוי חלונות את הכיוונים והגדלים. הסרת כל הכיוונים ויחס הגובה-רוחב הקבוע הגבלות מפריסות האפליקציה ומקובץ המניפסט של האפליקציה.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/letterboxing_optimization.png?authuser=9&hl=he)
האפליקציה תומכת בכל סוגי המכשירים.
פתרון זמני לתאימות
אם אפליקציה עם כיוון קבוע או יחס גובה-רוחב קבוע פועלת בחלון שבו האפליקציה לא תומכת ישירות בגודל או בכיוון של החלון, Android האפליקציה בפורמט letterbox כדי לשמור על ההמשכיות.
החל מ-Android 12 (רמת API 31) וממשיכים ב-12L (רמת API 32) הפלטפורמה מיישמת מגוון שיפורים באפליקציות בפורמט letterbox. Device (מכשיר) להטמיע את השיפורים בממשק המשתמש. אין צורך לבצע פעולות נוספות של האפליקציה שלך כדי ליהנות מהשיפורים.
ב-Android 12 (רמת API 31) נוספו שיפורי האסתטיקה הבאים, ניתנים להגדרה על ידי יצרני מכשירים:
- פינות מעוגלות: הפינות של חלון האפליקציה מתאפיינות במראה אלגנטי יותר.
- שקיפות של סרגל המערכת: סרגלי סטטוס וסרגלי ניווט, שמופיעים בשכבת-על של שקופים למחצה, כך שסמלים בסרגלים יוצגו תמיד מעל רקע של תיבת מכתבים.
- יחס גובה-רוחב שניתן להגדיר: אפשר לשנות את יחס הגובה-רוחב של האפליקציה כדי לשפר את המראה של האפליקציה.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/enhanced_letterboxing.png?authuser=9&hl=he)
איור 2. אפליקציה בפורמט letterbox עם שיפורים בממשק המשתמש.
12L (רמת API 32) מוסיפה את שיפורי הפונקציונליות הבאים:
מיקום שניתן להגדיר: במסכים גדולים, יצרני המכשירים יכולים למקם את האפליקציה בצד שמאל או ימין של המסך, כך לאינטראקציה קלה יותר.
לחצן עיצוב מחדש להפעלה מחדש: יצרני המכשירים יכולים להפעיל מחדש את המכשיר לחצן למצב תאימות גודל מראה חדש לשיפור הזיהוי של המשתמשים.
מערכת Android 13 (רמת API 33) מוסיפה תיבת דו-שיח עם הסבר למשתמש לגבי מיקום אפליקציה עם פורמט letterbox שמוצג במסך או תיבת letterbox במצב מסך מפוצל:
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/enhanced_letterboxing_user_dialog.png?authuser=9&hl=he)
איור 3. אפליקציה עם פורמט letterbox, תיבת דו-שיח להסבר למשתמש.
מצב תאימות לגודל
מצב תאימות הגודל הוא פורמט letterbox שכולל אפשרות להפעלה מחדש. בקרה שמאפשר למשתמשים להפעיל מחדש את האפליקציה ולשכתב את המסך. הפעלה של Android מצב תאימות גודל לאפליקציות שנקבע בהן שלא ניתן לשנות את הגודל שלהן. כאשר הפעילות עוברת למאגר תצוגה שלא תואם המערכת עשויה לשנות את גודל האפליקציה כדי למלא את תצוגת המכשיר מאפיין אחד לפחות.
שינויים בהגדרות המכשיר שעשויים להפעיל מצב תאימות לגודל הקובץ כוללים: הבאים:
- סיבוב המכשיר
- מכשירים מתקפלים – מתקפל או לא מתקפל
- מעבר בין מצב מסך מלא למצב תצוגה במסך מפוצל
בעיה
מצב תאימות הגודל חל בדרך כלל על פעילויות מוגבלות של הכיוון או יחס הגובה-רוחב, והם מוגדרים (או נקבעים על ידי המערכת) להיות בלתי ניתנת לשינוי.
האפליקציה נחשבת שאפשר לשנות את הגודל שלה, והיא לא תוקצה לגודל מצב תאימות — אם הוא עומד באחד מהקריטריונים הבאים:
- ניתן לשנות את גודלו באמצעות
resizeableActivity="true"
- תמיכה במצב תמונה בתוך תמונה (PIP)
- מוטמע
- האם השינוי
FORCE_RESIZE_APP
לכל אפליקציה הוחל על ידי יצרן המכשיר (המערכת מתעלמת ממאפיינים שהוגדרו על ידי האפליקציה)
אם האפליקציה לא עומדת בתנאים כלשהם, היא נחשבת לא תקפה ניתן לשנות את גודלו וניתן למקם אותו במצב תאימות לגודל.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/size_compatibility_mode_issue.gif?authuser=9&hl=he)
אפליקציה שלא ניתנת לשינוי קורסת במצב ריבוי חלונות.
אופטימיזציה
האפליקציה צריכה לתמוך בכל גודלי התצוגה. כדי לשנות את גודל האפליקציה, צריך להגדיר את
המאפיין android:resizeableActivity
של <activity>
או רכיב <application>
ל-true
. כדאי לעצב פריסות רספונסיביות או מותאמות לאפליקציה. לקבלת מידע נוסף
מידע נוסף, ראה
תמיכה בגדלים שונים של מסכים ובתמיכה
מצב ריבוי חלונות.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/size_compatibility_mode_optimization.gif?authuser=9&hl=he)
האפליקציה פועלת בכל גודל של חלונות.
פתרון זמני לתאימות
מערכת Android מציבה אפליקציה במצב תאימות גודל כשהמערכת קובעת ניתן לשפר את תצוגת האפליקציה בפורמט letterbox על ידי שינוי גודל האפליקציה כדי למלא חלון תצוגה במאפיין אחד לפחות. המערכת מציגה פקד להפעלה מחדש שיוצרת מחדש את תהליך האפליקציה, משחזרת את הפעילות ומשרטטת מחדש מסך. כדאי לעיין גם במאמר סקירה כללית של תהליכים ושרשורים.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/size_compatibility_mode_workaround.gif?authuser=9&hl=he)
אפליקציה בפריסה לאורך בלבד בפורמט letterbox לרוחב, שהגודל שלה שונה על ידי בקרת ההפעלה מחדש.
לולאות מהבהבות
אם אפליקציה לא תומכת בכל כיוונים של המסך, יכול להיות שהיא תפעל שוב ושוב לבקש כיוונים חדשים כאשר מתרחש שינוי בתצורה, יצירת לולאה אינסופית שגורמת למסך להבהב או שהאפליקציה מסתובבת ללא הפסקה.
בעיה
בגרסה Android 12 (רמת API 31) ואילך, יצרני מכשירים יכולים להגדיר
במכשירים שלהם מתעלמים מהגבלות כיוון שצוינו על ידי האפליקציות, ובמקום זאת
אכיפת מצבי תאימות. לדוגמה, מכשיר מתקפל יכול להתעלם
android:screenOrientation="portrait"
של הפעילות
כשהפעילות מוצגת בגודל טאבלט לרוחב של המכשיר,
של המסך הפנימי.
אם המערכת מתעלמת ממגבלות הכיוון של האפליקציה, האפליקציה יכולה לבצע את הפעולות באופן פרוגרמטי
להגדיר את הכיוון באמצעות קריאה
Activity#setRequestedOrientation()
השיחה
מפעילה מחדש את האפליקציה אם האפליקציה לא מטפלת בשינויים בהגדרות האישיות.
שינויים בהגדרות הכינוי). אחרי
מופעלת מחדש, המערכת מתעלמת שוב מהגבלות הכיוון של האפליקציה, האפליקציה חוזרת על עצמה
את הקריאה אל setRequestedOrientation()
, השיחה מפעילה מחדש את האפליקציה,
כך שממשיכים לולאה שממשיכים את עצמם.
דרך נוספת שבה ניתן להיתקל בכך היא כאשר
כיוון טבעי (הכיוון הרגיל:
נקבעים לפי Android) של מסך המכשיר לרוחב (כלומר
החזרות של Display#getRotation()
Surface.ROTATION_0
כשהמכשיר הוא לרוחב
). בעבר, אפליקציות הניחו שהמשמעות של Display.getRotation() =
Surface.ROTATION_0
היא שהמכשיר בפריסה לאורך, אבל לא
תמיד על המסך, לדוגמה, במסך הפנימי של מכשירים מתקפלים מסוימים
בחלק מהטאבלטים.
אפליקציה בפריסה לרוחב במסך פנימי מתקפל עשויה לבדוק את
סיבוב מסך, קבלת הערך ROTATION_0
, מניחים את הכיוון הטבעי
של המכשיר הוא לאורך,
setRequestedOrientation(
ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
)
כדי להגדיר מחדש את פריסת האפליקציה. לאחר הפעלה מחדש של האפליקציה (בפריסה לרוחב
כיוון), הוא עשוי לבדוק שוב את סיבוב המסך, ולקבל ערך של
ROTATION_0
, שיחה
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
, וגם
וממשיכים את הלולאה האינסופית.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/flickering_loops_issue.gif?authuser=9&hl=he)
האפליקציה בפריסה לרוחב בלבד בתצוגה לאורך מבצעת שיחות חוזרות אל Activity#setRequestedOrientation()
.
אופטימיזציה
באפליקציות אסור לבצע את הפעולות הבאות:
- צריך להגדיר כיוון ברירת מחדל עם
Activity#setRequestedOrientation()
בקטע פעילותonCreate()
כי בקשת הכיוון יכולה להיות הופעלה באופן בלתי צפוי על ידי שינויי הגדרות שלא טופלו - צריך להניח שהכיוון הטבעי של המכשיר (
ROTATION_0
) הוא לאורך - מגדירים את הכיוון לפי אותות שלא קשורים לגודל החלון הנוכחי,
בתור
Display#getRotation()
, נוכחות שלFoldingFeature
, או ממשקי API שהוצאו משימוש.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/flickering_loops_optimization.gif?authuser=9&hl=he)
שינוי ההגדרות האישיות של האפליקציה לא כולל הגבלות כיוון, ולכן לא נכנס ללולאה מהבהבת.
פתרון זמני לתאימות
מערכת Android מתעלמת משיחות אל Activity#setRequestedOrientation()
במקרים הבאים
מצבים:
הפעילות כבר הופעלה מחדש מקריאה קודמת ל-method, או טיפול בכוח הסיבוב של תאימות המצלמה הופעל (ראו מצלמה) תצוגה מקדימה שבהמשך).
יצרני מכשירים יכולים להחיל את ההתנהגות הזו על אפליקציה עם
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
הפעילות ביצעה יותר משתי בקשות כיוון תוך שנייה אחת. מציין שאירעה לולאה. מבין שתי הבקשות בלולאה, מערכת Android משתמשת שממקסמת את אזור התצוגה של האפליקציה.
יצרני מכשירים יכולים להחיל את ההתנהגות הזו על אפליקציה עם
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
תצוגה מקדימה של מצלמה
התצוגה המקדימה של המצלמה (או העינית) של אפליקציות המצלמה עשויה להיות לא מיושרת או מעוותת בטאבלטים, במחשבים ניידים ובמסכים מתקפלים.
בעיה
במסמך הגדרת התאימות ל-Android מצוין חיישן תמונה של המצלמה "חייב להיות מכוון כך שהממד הארוך של המצלמה מתאימה למאפיין הארוך של המסך."
לרוב, אפליקציות מניחות שכיוון המכשיר וכיוון חיישן המצלמה לאורך - הנחה סבירה לגבי טלפונים ניידים רגילים. אבל הכיוון הטבעי של טאבלטים ומחשבים ניידים ושל חיישני המצלמה שלהם לרוחב. כמו כן, גורמי צורה חדשים, כמו מכשירים מתקפלים, יכולים לכלול מספר בכמה כיוונים וחיישני מצלמה בכיוונים שונים.
התחלת פעילות עם כיוון המצלמה שהאפליקציה לא מצפה לו, או מעבר בין מצלמות שונות או מסכי מכשיר שונים (למכשירים מתקפלים) עלול לגרום תצוגה מקדימה לא ישרה או מעוותת של המצלמה.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/camera_preview_issue.png?authuser=9&hl=he)
התצוגה המקדימה של המצלמה לא מיושרת ומעוותת במסך גדול מתקפל.
אופטימיזציה
אפליקציות המצלמה צריכות לזהות ולנהל בצורה נכונה את כיוון המכשיר ואת המצלמה כיוון החיישן כדי להציג תצוגה מקדימה של מצלמה ביישור ומותאם אישית. האפליקציות צריכות לחשב את סיבוב המכשיר, סיבוב החיישן ומסך או חלון יחס גובה-רוחב, ולאחר מכן להחיל את התוצאות על התצוגה המקדימה של המצלמה. לקבלת מידע מפורט לשם כך, אפשר לעיין בתצוגה המקדימה של המצלמה ובהיכרות עם המצלמה העינית.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/camera_preview_optimization.png?authuser=9&hl=he)
התצוגה המקדימה של המצלמה מיושרתת ומותאמת כראוי בכל הכיוונים של המכשיר.
פתרון זמני לתאימות
המכשיר פועל בכיוון טבעי כאשר Display#getRotation()
מחזירה Surface.ROTATION_0
. המערכת מחשבת
CameraCharacteristics.SENSOR_ORIENTATION
מהכיוון הטבעי של המכשיר. Android מיישר את החלון לאורך של
אפליקציות מוגבלות לאורך עם הכיוון הטבעי של המכשיר,
היא הציפיות של רוב האפליקציות. מערכת Android גם חותכת את התמונה של חיישן המצלמה כאשר
החיישן בתצוגה לרוחב והתצוגה המקדימה של המצלמה היא לאורך. המוצר הספציפי
הפתרונות הבאים כוללים:
אילוץ סיבוב התצוגה המקדימה של המצלמה באפליקציות מוגבלות לאורך: אפליקציות מוגבל לכיוון אנכי של המכשיר. יש לצפות לכיוון הטבעי של המכשיר והכיוון של חיישן המצלמה לאורך. אבל ב-Android 12, (רמת API 31) ואילך, אפליקציות יכולות לפעול בכיוונים שונים של מכשירים אם יצרני המכשירים מתעלמים ממפרט הכיוון.
כשאפליקציה עם הגבלת תצוגה לאורך מחוברת למצלמה, Android מאלץ מסובב את האפליקציה כדי להתאים את חלון האפליקציה לאורך לכיוון המכשיר.
בחלק מהטאבלטים (ראו מכשירי עזר), האפליקציה החלון לאורך מסובב לאורך של מסך מלא כדי ליישר עם בכיוון הטבעי של המכשיר. האפליקציה תופסת את המסך המלא אחרי החלת כוח בסבב.
טאבלט – אילוץ סיבוב אפליקציה שמוגבלת לאורך.
במסך הפנימי של המכשירים המתקפלים לרוחב (ראו חומר עזר בנושא) מכשירים), פעילויות בפריסה לאורך בלבד מסובבים לרוחב כדי ליישר קו עם הכיוון הטבעי הפתוח. האפליקציה בפורמט letterbox אחרי סיבוב כוח.
מתקפל – אילוץ סיבוב של אפליקציה מוגבלת לאורך. בנוסף, האפליקציה מוצגת בפורמט letterbox.
חיתוך מצלמה קדמית פנימית: חיישן המצלמה הפנימי הפנימי בחלק מהמצלמות מכשירים מתקפלים מכוונים לרוחב. בנוסף לביצוע סיבוב כוח של תצוגה מקדימה של המצלמה במסך הפנימי המתקפל, Android חותך את החלק הקדמי הפנימי שדה הראייה של המצלמה (לרוחב) כך שהחיישן יצלם את התמונה הפוכה בכיוון המכשיר.
אילוץ רענון של התצוגה המקדימה של המצלמה: המערכת עוברת בין הפעילויות השיטות
onStop()
ו-onStart()
(כברירת מחדל) אוonPause()
וגםonResume()
(מיושם על ידי OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE לכל אפליקציה) לאחר סיבוב כוח, כדי לוודא שהתצוגה המקדימה של המצלמה מוצג כראוי.התאמה של יחס גובה-רוחב: המערכת משנה באופן דינמי את יחס הגובה-רוחב של את התצוגה המקדימה של המצלמה מסובבת בכוח ליחס גובה-רוחב מינימלי גבוה יותר, מבטיח שגודל התצוגה המקדימה של המצלמה יהיה נכון.
מפתחי אפליקציות יכולים לעקוף את הפתרונות האלה אם האפליקציות מטפלות בתצוגה המקדימה של המצלמה בצורה נכונה. למידע נוסף על שינויים לפי אפליקציה.
ממשקי API שנעשה בהם שימוש נפוץ לרעה
כי ב-Android נוספה תמיכה בתכונות כמו 'מצב ריבוי חלונות' כמו מכשירים מתקפלים, ממשקי API מדור קודם הוצאו משימוש והוחלפו ממשקי API עדכניים שפועלים בכל גודלי המסכים ובכל סוגי המכשירים גורמים. עם זאת, ממשקי ה-API שהוצאו משימוש עדיין זמינים להעברה לאחור. בתאימות מלאה.
חלק מממשקי ה-API של View
מיועדים למטרות מיוחדות שלא תמיד מתאימות
להבנה על ידי המפתחים.
בעיה
המפתחים ממשיכים להשתמש בממשקי API של Display
שהוצאו משימוש, ומניחים באופן שגוי
ממשקי API מחזירים את גבולות האפליקציה במקום את גבולות אזור התצוגה של המכשיר. או מפתחים
להשתמש בטעות בממשקי API של תצוגה למטרה מיוחדת כדי לקבל מדדי תצוגה כלליים.
התוצאה היא חישובים שגויים כשממקמים מחדש את רכיבי ממשק המשתמש אחרי חלון האפליקציה
שינוי גודל של אירועים, דבר שגורם לבעיות בפריסה.
ממשקי API לרשת המדיה שהוצאו משימוש ונפוצים לשימוש לרעה:
מידע נוסף זמין במאמר הבא: תמיכה במצב ריבוי חלונות.
ממשקי API של צפיות לא בשימוש:
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/misused_APIs_issue.png?authuser=9&hl=he)
API שהוצא משימוש מבצע חישוב שגוי של גבולות האפליקציה. תוכן האפליקציה מוצג במסך.
אופטימיזציה
אין להסתמך אף פעם על גודל התצוגה הפיזי למיקום רכיבי ממשק המשתמש. מעבירים את
אפליקציה לממשקי API על סמך WindowMetrics
, כולל
ממשקי API של WindowManager
:
פלטפורמה:
תרמיל ריחוף:
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/misused_APIs_optimization.png?authuser=9&hl=he)
ה-API מחשב בצורה נכונה את מדדי החלון של האפליקציה.
פתרון זמני לתאימות
שני שינויים משנים את ממשקי ה-API של Display
שהוצאו משימוש ונעשה בהם שימוש לרעה בממשקי ה-API של View
להחזיר את גבולות האפליקציה:
ALWAYS_SANDBOX_DISPLAY_APIS
לDisplay
ממשקי API; OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
ל-View
ממשקי API. ALWAYS_SANDBOX_DISPLAY_APIS
מוחל כברירת מחדל גם על
אפליקציות שעומדות בדרישות של מצב תאימות גודל.
פעילויות בשקיפות
פעילויות שקופות הן תוצאה של סגנונות רקע שקופים, דוגמה:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
נושאים שקשורים לתיבות דו-שיח, כמו Theme.MaterialComponents.Dialog
, יכולים
כוללים סגנונות שהופכים את הפעילויות לשקיפות.
פעילויות שקופות לא מכסות את כל שטח התצוגה הזמין, ולכן קשה לנהל אותם מכיוון שאזור התצוגה הזמין עשוי להשתנות בהתאם לשינויים בהגדרות כמו סיבוב מכשירים, קיפול ופתיחה של מכשירים וכן מצב ריבוי חלונות.
בעיה
פעילות שקופה צריכה להתאים לגבולות של הפעילות האטום הראשונה מתחת לפעילות השקופה במקבץ הפעילות של המשימה. אבל אטום פעילות שמפעילה תיבת דו-שיח של הרשאה, trampoline (פעילות שמפעילה פעילות אחרת ולאחר מכן נעלמת); וגם כך שהמערכת לא יכולה לקבוע את גבולות הפעילות של הטרמפולינה הושקה הפעילות של תיבת הדו-שיח עם הרשאה שקופה.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/transparent_activities_issue.png?authuser=9&hl=he)
תיבת הדו-שיח לא במיקום הנכון כי הפעילות הופעלה בטרמפולינה.
אופטימיזציה
פעילויות שקופות מקבלות בירושה את המגבלות שלהן מהרמה הגבוהה ביותר פעילות מתחתיהם במקבץ הפעילות של המשימה. הפעילות האטום חייבת להיות לכל מחזור החיים של הפעילות השקופה, החל מהפעילות מיצירה ועד השמדה. לכן, אין לשלוח בקשות להרשאות מ- פעילויות טרמפולינה.
אם פעילות טרמפולינה מפעילה בקשת הרשאה, ייתכן שהמשתמש לא כדי לראות את תיבת הדו-שיח של ההרשאות, כי הפעילות בטרמפולינות נהרוס לפני שהמשתמש הספיק להגיב לתיבת הדו-שיח, ניתן לחשב את המאפיינים והמיקום של הפעילות בתיבת הדו-שיח בטעות.
האפליקציות תמיד צריכות להפעיל בקשות הרשאה מפעילויות שנשארות גלויות עד שהמשתמש יקבל החלטה לגבי ההרשאה.
פינות מעוגלות
פעילות יכולה להיות שקופה בגלל סגנון שמציין את הרקע או כי תוכן הפעילות לא ממלא את שטח תצוגה. אם פעילות שקופה ממלאת את שטח התצוגה הזמין, המערכת מחילה באופן אוטומטי פינות מעוגלות על הפעילות כשהיא מוגדרת לעשות זאת על ידי יצרן המכשיר. אבל אם התרחשה פעילות שקופה (כמו תיבת דו-שיח עם הרשאה) לא ממלאת את השטח הזמין, אתם מחליטים האם להחיל פינות מעוגלות או לא.
תיבות הדו-שיח של ההרשאות לא ממלאות את שטח התצוגה הזמין כי תיבת הדו-שיח הפריסה משתמשת בדרך כלל ב-LayoutParams.WRAP_CONTENT LayoutParams.MATCH_PARENT.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/transparent_activities_optimization.png?authuser=9&hl=he)
תיבת דו-שיח עם פינות מעוגלות ממוקמות בצורה נכונה מעל פעילות ההפעלה הגלויה.
פתרון זמני לתאימות
צריך להשאיר את הפעילויות שמפעילות פעילויות בתיבת דו-שיח גלויות עד שהמשתמש הגיבו לתיבת הדו-שיח.
המערכת מבטיחה שפעילות שקופה תירש את כל המגבלות לפעילות האטום הראשונה מתחת לפעילות השקופה במקבץ הפעילות, כולל מגבלות שקשורות לנושאים הבאים:
- מצב תאימות לגודל
- כיוון
- יחס גובה-רוחב
משחקי Unity
משחקי Unity פועלים במסך מלא ב-Android או במצב ריבוי חלונות. אבל, לפעמים הרבה משחקי Unity מאבדים מיקוד ומפסיקים לצייר תוכן כשמוקמים את האפליקציה מצב ריבוי חלונות.
בעיה
מערכת Unity הוסיפה Resizable Window
אפשרות ב-Unity 2019.4 לתמיכה במצב ריבוי חלונות ב-Android. אבל, לפעמים
ההטמעה הראשונית לא הגיבה למחזור החיים של הפעילות
במצב ריבוי חלונות בצורה נכונה,
UnityPlayer להשעות את ההפעלה כשהאפליקציה מאבדת את המיקוד. הנגן ביצע עיבוד של
מסך שחור או את הפריים האחרון הקפוא של המשחק. הגיימפליי התחדש רק כאשר
המשתמש הקיש על המסך. בעיה זו קיימת באפליקציות רבות שמשתמשות במנוע Unity
יוצג כחלון שחור במצב ריבוי חלונות.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/unity_games_issue.gif?authuser=9&hl=he)
המשחק מאבד את המיקוד במצב ריבוי חלונות ומוצג כחלון שחור.
אופטימיזציה
יש לשדרג את Unity לגרסה 2019.4.40 ואילך ולייצא מחדש את המשחק. יש להשאיר את
אפשרות אחת (Resizable Window
) סומנה
הגדרות נגן Android, אחרת
המשחק מושהה כשהוא לא בפוקוס, למרות שהוא גלוי לגמרי
מצב ריבוי חלונות.
![](https://developer.android.google.cn/static/images/guide/practices/compatibility-mode/unity_games_optimization.gif?authuser=9&hl=he)
המשחק מעבד תוכן בצורה נכונה במצב של ריבוי חלונות, גם כשהוא לא בפוקוס.
פתרון זמני לתאימות
יצרני המכשירים יכולים להחיל את
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
שינוי מברירת המחדל לכל אפליקציה כדי לספק אירוע מזויף של מיקוד לאפליקציה שנמצאת
מצב ריבוי חלונות. הביטול מאפשר לפעילות לצייר מחדש את התוכן
אסור להסתיר.
בדיקת האפליקציה לאיתור בעיות תאימות
כדי לבדוק את האפליקציה ולהבין איך היא פועלת על סמך גורמי צורה שונים, תוכלו להיעזר במקורות המידע הבאים:
- סטרימינג ממכשיר: כדי לבדוק את האפליקציה במכשירים בסביבת הייצור (כולל מכשירי עזר) שמתארחים במרכזי הנתונים של Google. למידע נוסף סטרימינג במכשירי Android, מופעל על ידי Firebase
- אמולטורים ב-Android Studio Hdgehog: למידע על יצירת אמולטורים למכשירי עזר: יצירה וניהול של מכשירים וירטואליים
- אמולטור של Android Studio שניתן לשנות את גודלו: למידע על גישה לכלי וירטואלי מכשירים, ניתן לעיין במאמר הפעלת אפליקציות באמולטור Android
בפורמט letterbox
מוודאים שבכל פעילות אפשר להשתמש בכל שטח התצוגה שזמין לאפליקציה. קודם כול, מצהירים על הקוד הבא בתיקיית הבדיקה:
Kotlin
fun Activity.isLetterboxed() : Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(Activity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds() Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
לאחר מכן צריך להריץ בדיקה כדי להצהיר על ההתנהגות ולוודא שפעילות היעד לא בפורמט letterbox:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
באופן אידיאלי, כדאי להריץ בדיקה כזו רק עד שהיא תעבור בהצלחה ומאמתת כי האפליקציה הפעילויות תופסות את כל שטח התצוגה שזמין לאפליקציה. בדיקת האפליקציה בכל סוגי המכשירים כדי להבטיח התנהגות עקבית.
שינויים מברירת המחדל לפי אפליקציה
ב-Android יש שינויים שמשנים את אופן הפעולה המוגדר של אפליקציות. עבור
לדוגמה, הביטול FORCE_RESIZE_APP
מורה על
כדי לעקוף את מצב התאימות לגדלים ולשנות את גודל האפליקציה כך שתתאים לתצוגה
גם אם resizeableActivity="false"
שצוין בקובץ המניפסט של האפליקציה.
יצרני מכשירים מפעילים שינויים מברירת המחדל באפליקציות נבחרות או על כל האפליקציות מכשירים ספציפיים עם מסך גדול. ב-Android מגרסה 14 (רמת API 34) ואילך, משתמשים יכול להחיל שינויים מברירת המחדל על אפליקציות דרך הגדרות המכשיר.
שינויים מברירת המחדל של המשתמשים לכל אפליקציה
ב-Android מגרסה 14 ואילך, תפריט הגדרות מאפשר למשתמשים לשנות את יחס הגובה-רוחב יחס בין האפליקציות. מכשירים עם מסך גדול, כמו קובץ העזר מכשירים להטמיע את התפריט.
התפריט מכיל רשימה של כל האפליקציות שמותקנות במכשיר. המשתמשים בוחרים ואז להגדיר את יחס הגובה-רוחב של האפליקציה ל-3:4, 1:1, למסך מלא או לערך אחר שהוגדר על ידי יצרן המכשיר. המשתמשים יכולים גם לאפס את יחס הגובה-רוחב ל ברירת המחדל של האפליקציה, שמצוינת בקובץ המניפסט של האפליקציה.
כדי לבטל את ההסכמה לביטול התאימות, צריך להגדיר את תגי PackageManager.Property
הבאים של אפליקציות:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
כדי לבטל את ההסכמה לשינוי התאימות ליחס גובה-רוחב של המשתמש, צריך להוסיף את המאפיין. בקובץ המניפסט של האפליקציה ומגדירים את הערך כ-
false
:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
האפליקציה תוחרג מרשימת האפליקציות בהגדרות המכשיר. משתמשים לא תהיה אפשרות לשנות את יחס הגובה-רוחב של האפליקציה.
להגדרת המאפיין ל-
true
אין השפעה.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
כדי לבטל את ההסכמה להצגת האפשרות במסך מלא של תאימות ליחס גובה-רוחב של המשתמש לשנות, להוסיף את הנכס למניפסט של האפליקציה ולהגדיר את הערך כ-
false
:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
האפשרות של מסך מלא תוסר מרשימת האפשרויות של יחס גובה-רוחב הגדרות המכשיר. המשתמשים לא יוכלו להחיל את שינוי המסך המלא על באפליקציה שלך.
להגדרת המאפיין הזה כ-
true
אין השפעה.
אופטימיזציה של האפליקציה לכל המסכים: אין להגדיר הגבלות על יחס גובה-רוחב באפליקציה שלך. שימוש בסיווגי גודל של חלונות כדי לתמוך במגוון מבוססות על כמות השטח הזמין לתצוגה.
שינויים מברירת המחדל של יצרן המכשיר לכל אפליקציה
יצרני מכשירים מחילים שינויים מברירת המחדל לכל אפליקציה במכשירים נבחרים. מכשירי העזר עשויים להחיל חלק מביטולי השינוי על כברירת מחדל של אפליקציות שונות.
לאפליקציות אפשר לבטל את ההסכמה לרוב השינויים (מידע נוסף זמין בקטע לכל אפליקציה) מבטל את בטבלה למטה).
אפשר לבדוק את האפליקציה עם שינויים מופעלים או מושבתים באמצעות התאימות framework (ראו כלים של מסגרת התאימות). כשהמדיניות מופעלת, השינויים יחולו על כל האפליקציה.
אפשר גם להשתמש ב-Android Debug Bridge (adb) כדי להפעיל או להשבית את השינויים מברירת המחדל ולקבוע אילו שינויים יחולו על האפליקציה.
מפעילים או משביתים את השינויים מברירת המחדל באופן הבא:
adb shell am compat enable/disable <override name/id> <package>
במכשירי העזר, בודקים אילו שינויים חלים על האפליקציה שלך:
adb shell dumpsys platform_compat | grep <package name>
בטבלה הבאה מפורטים כל השינויים האפשריים, יחד עם הנחיות לבצע אופטימיזציה של האפליקציה כך שהיא לא תצטרך להסתמך על שינויים מברירת המחדל. אפשר להוסיף סימונים של מאפיינים בקובץ המניפסט של האפליקציה כדי לבטל את ההסכמה לחלק משינויים אלה.
שינויים מברירת המחדל לפי אפליקציה | |||
---|---|---|---|
סוג | שם | מזהה | תיאור |
אפשרות סגירה | FORCE_RESIZE_APP | 174042936 | עקיפה של מצב תאימות הגודל של האפליקציה כשמשנים את ההגדרות האישיות. |
FORCE_NON_RESIZE_APP | 181136395 | המערכת מאלצת את האפליקציה לעבור למצב תאימות גודל כשמשנים את ההגדרות האישיות. | |
יחס גובה-רוחב | OVERRIDE_MIN_ASPECT_RATIO | 174042980 | שינוי מברירת המחדל של שומר השער שצריך להפעיל כדי להחיל שינויים אחרים של יחס גובה-רוחב. |
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY | 203647190 | אם המדיניות מופעלת (ברירת המחדל), המגבלות מבטלות את ההיקף לפעילויות בפריסה לאורך בלבד. | |
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM | 180326845 | שינוי יחס הגובה-רוחב המינימלי ל-3:2. | |
OVERRIDE_MIN_ASPECT_RATIO_LARGE | 180326787 | שינוי יחס הגובה-רוחב המינימלי ל-16:9. | |
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN | 208648326 | משנה את יחס הגובה-רוחב המינימלי כך שיתאים ל-50% מגודל התצוגה (או מיחס הגובה-רוחב של המסך המפוצל). | |
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN | 218959984 | ההגדרה משביתה את שינוי יחס הגובה-רוחב המינימלי כך שהאפליקציות יוצגו במסך מלא כשהמכשיר בפריסה לאורך. | |
כיוון | OVERRIDE_ANY_ORIENTATION | 265464455 | מאפשר שינוי של כל כיוון. |
OVERRIDE_ANY_ORIENTATION_TO_USER | 310816437 | ביטול של הגבלות הכיוון, יכולת הכיווץ ויחס הגובה-רוחב. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT | 265452344 | המדיניות הזו מבטלת את הכיוון לאורך כשהכיוון של פעילות מסוים לא מוגדר. | |
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR | 265451093 | שינוי הכיוון ל-nosensor (שימוש בכיוון הטבעי של המכשיר) כאשר לפעילות יש כיוון לא מוגדר. |
|
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE | 266124927 | סיבוב של אפליקציות בפריסה לרוחב בלבד ב-180 מעלות. | |
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA | 265456536 | הגבלת הכיוון משנה את היקף ההרשאות למקרים שבהם האפליקציה מחוברת למצלמה. | |
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION | 255940284 | מגדיר את התצוגה לכיוון קבוע לרוחב טבעי כשהמשימה מוצגת במסך מלא (כולל בפורמט letterbox). | |
OVERRIDE_ENABLE_COMPAT_IGNORE_HOWMANY_ORIENTATION | 254631730 | מתעלם מבקשות כיוון מהאפליקציה כדי להימנע מלולאות אינסופיות של סיבוב. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | מתעלם מבקשות חוזרות לשינוי כיוון במהלך הפעלה מחדש של פעילות. אם מערכת Android מזהה שהאפליקציה מבקשת לפחות שני כיוונים חדשים בתוך שנייה אחת, המערכת מחשיבה את זה בתור לולאה אינסופית ומחילה את השינוי מברירת המחדל. | |
OVERRIDE_RESPECT_Ask_ORIENTATION | 236283604 | ההגדרה של בקשת הכיוון מתעלמת מההגדרה של בקשת הכיוון שלא תופסת בפורמט letterbox. | |
ממשקי API של Sandbox | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | המדיניות מונעת שינוי של ההתנהגות של ממשקי API לרשת המדיה. |
ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | מאלצת את ממשקי ה-API של Display באפליקציה להחזיר את גבולות האפליקציה. ממשקי API של Display מחזירים גבולות לוגיים של אזור התצוגה, אבל לפעמים האפליקציה יוצאת מנקודה הנחה ש-Display ממשקי API מחזירים גבולות לאפליקציה, דבר שמוביל לבעיות בממשק המשתמש. |
|
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | מאלצת את ממשקי ה-API של View שנמצאים בשימוש באפליקציה להחזיר גבולות אפליקציה. ממשקי API של View מחזירים גבולות לוגיים של אזור התצוגה, אבל לפעמים האפליקציה יוצאת מנקודה הנחה ש-View ממשקי API מחזירים גבולות לאפליקציה, דבר שמוביל לבעיות בממשק המשתמש. |
|
תאימות למצלמה | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | משביתה את כוח הסיבוב. כברירת מחדל, כל אפליקציות המצלמה בכיוון קבוע מסובבות באופן מאולץ כשהתצוגה המקדימה של המצלמה פתוחה. |
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH | 264304459 | ההגדרה הזו מסירה את הרענון הקשיח שמוגדר כברירת מחדל כשמתבצעת אילוץ של סיבוב התצוגה המקדימה של המצלמה. | |
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE | 264301586 | משנה את הרענון הקשיח לרענון רך כשמתבצעת אילוץ של סיבוב התצוגה המקדימה של המצלמה, כדי לשמור על המצב במהלך הסיבוב המאולץ. כברירת מחדל, מערכת Android מחילה רענון קשיח כשמתבצע רוטציה ידנית של התצוגה המקדימה של המצלמה. רענון קשיח עלול לגרום לבעיות של איבוד מצב של אפליקציות או שהן נסתרות, בהתאם לאופן שבו האפליקציות שמרו במטמון את המצב הקודם שלהן. | |
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT | 250678880 | חיתוך מאגר הנתונים הזמני של התמונה במצלמה הקדמית. אם השינוי מברירת המחדל מושבת, החיתוך של המצלמה הקדמית יוסר ושדה הראייה של התצוגה המקדימה של המצלמה מוגדל. כברירת מחדל בחלק מהמכשירים המתקפלים (ראו מכשירי עזר), המערכת חותכת את התצוגה המקדימה של המצלמה בכל אפליקציות המצלמה כשמשתמשים במצלמה הקדמית. | |
שונות | OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS | 263259275 | ההגדרה הזו מונעת את ההסתרה של האפליקציה במצב של מסך מפוצל. האפליקציה ממתינה למיקוד לפני שרטוט תוכן האפליקציה, דבר שעלול לגרום לקפוא או להסתיר אותו. שינוי מברירת המחדל מאפשר ל-Android לשלוח לאפליקציה אירוע התמקדות מזויף, שמסמן לאפליקציה להתחיל לצייר תוכן שוב. |
FORCE_RESIZE_APP
המדיניות הזו מאלצת את החבילות שעליהן חלה השינוי לשנות את גודל החבילות. לא קובעים אם ניתן להעביר את האפליקציה למצב ריבוי חלונות, אבל מתירה אפשרות לשנות את גודל האפליקציה בלי להיכנס למצב תאימות לגודל המסך כשמשנים את גודל המסך.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
בקובץ המניפסט של האפליקציה, יש להגדיר את
android:resizeableActivity
ל-true
או,
תמיכה בשינוי הגודל בזמן השבתה של מצב ריבוי חלונות באמצעות
android:resizeableActivity=false
, הגדרת android.supports_size_changes
סימון מטא-נתונים ל-true
.
איך מבצעים אופטימיזציה של אפליקציות
השתמשו בפריסות רספונסיביות/מותאמות כדי לאפשר לאפליקציות להסתגל לכל גודלי המסכים יחסי גובה-רוחב. צפייה תמיכה בגדלים שונים של מסכים.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
בתור
false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי ולשנות את גודל האפליקציה:
adb shell am compat enable FORCE_RESIZE_APP <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable FORCE_RESIZE_APP <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
FORCE_NON_RESIZE_APP
כך מאלצים את החבילות שעליהן חלה השינוי מברירת המחדל שלא ניתן לשנות את גודלן הזנת מצב תאימות גודל בעת שינוי הגדרות אישיות.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
מגדירים גם את המאפיין android:resizeableActivity
וגם את המאפיין
סימון מטא-נתונים android.supports_size_changes
ל-false
בקובץ המניפסט של האפליקציה,
והם מצהירים על הגבלת הכיוון או על יחס הגובה-רוחב.
איך מבצעים אופטימיזציה של אפליקציות
כל האפליקציות שמתנהגות כראוי אם משנים את הגודל שלהן צריכות לכלול
android:resizeableActivity
או android.supports_size_changes
הוגדרו לערך true
.
צריך לשפר אפליקציות אחרות כדי שיתנהגו כראוי לאחר שינוי הגודל. צפייה
android:resizeableActivity.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES
בתור
false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_RESIZEABLE_ACTIVITY_OVERRIDES"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי ולבטל את גודל האפליקציה:
adb shell am compat enable FORCE_NON_RESIZE_APP <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable FORCE_NON_RESIZE_APP <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO
שומר הסף לכל השינויים שמחייבים יחס גובה-רוחב מינימלי נתון.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
להגדיר את android:minAspectRatio
ברמת הפעילות או האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
אל תגדירו באפליקציה הגבלות על יחס גובה-רוחב. איך לוודא שהאפליקציה תומכת בתמיכה
בגדלים שונים. שימוש בסיווגים של גדלים של חלונות
כדי לתמוך בפריסות שונות בהתאם לנפח השטח שיש לאפליקציה
מסך. לעיון ב-Compose WindowSizeClass
API
ו-View WindowSizeClass
API.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
יש לציין הגבלת יחס גובה-רוחב או להגדיר את דגל המאפיין
PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE
עד false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_MIN_ASPECT_RATIO_OVERRIDE"
android:value="false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
הגבלת הגדרות האפליקציה שמאלצות יחס גובה-רוחב מינימלי נתון לפעילויות
בפריסה לאורך בלבד. מופעל כברירת מחדל ותקף רק
אם גם OVERRIDE_MIN_ASPECT_RATIO
מופעל.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
דגלי מאפיינים שצריך לשנות
ראו OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
הגדרה של יחס הגובה-רוחב המינימלי של הפעילות לערך בינוני (3:2)
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
דגלי מאפיינים שצריך לשנות
ראו OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_MEDIUM <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_LARGE
הגדרה של יחס הגובה-רוחב המינימלי של הפעילות לערך גדול (16:9)
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
דגלי מאפיינים שצריך לשנות
ראו OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_LARGE <package>`
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
מאפשר שימוש ביחס גובה-רוחב של מסך מפוצל. מאפשרת לאפליקציה להשתמש בכל מקום פנוי במצב מסך מפוצל, תוך הימנעות מפורמט letterbox.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
דגלי מאפיינים שצריך לשנות
ראו OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
השבתת השינוי של יחס הגובה-רוחב המינימלי במסך מלא לאורך כדי להשתמש בכולם שטח המסך הזמין.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_MIN_ASPECT_RATIO.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
ראו OVERRIDE_MIN_ASPECT_RATIO.
דגלי מאפיינים שצריך לשנות
ראו OVERRIDE_MIN_ASPECT_RATIO.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_ANY_ORIENTATION
ההגדרה הזו מפעילה את הביטולים הבאים כדי לבטל כל כיוון:
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
מגדירים את מאפיין המניפסט activity:screenOrientation
,
או להשתמש ב-API של Activity#setRequestedOrientation()
.
איך מבצעים אופטימיזציה של אפליקציות
האפליקציה צריכה לתמוך בכל הכיוונים. שינוי כיוון הוא
שינוי תצורה, שיכול לטפל באחת משתי הדרכים הבאות: לאפשר
להשמיד את האפליקציה וליצור מחדש את האפליקציה, או לנהל את השינויים בהגדרות
בעצמך. אם אתם מנהלים בעצמכם את השינויים בהגדרות, מצב האפליקציה יכול להיות
נשמר באמצעות ViewModel
. במקרים מוגבלים מאוד, ניתן להחליט לנעול את
בכיוון מסוים במסכים קטנים בלבד, למרות שזה עשוי להשפיע על הגודל
לאפשר למשתמש לסובב את האפליקציה לפי הצורך. ב-Android מגרסה 12L ואילך:
ניתן לשנות את הכיוון הקבוע על ידי הגדרת המכשיר. לקבלת מידע נוסף
מידע על טיפול בשינויים בתצורה ותמיכה בכל
את הכיוונים אפשר לעיין במאמר שינויים בהגדרות הכינוי.
סקירה כללית של ViewModel וכיוון האפליקציה מוגבל כאשר
בטלפונים אבל לא במכשירים עם מסך גדול.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE
אל false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_ORIENTATION_OVERRIDE"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_ANY_ORIENTATION_TO_USER
מאפשר לאפליקציה למלא את שטח התצוגה הזמין. משנה כל כיוון,
ההגבלות על יכולת המשנה ויחס הגובה-רוחב שצוינו בקובץ המניפסט של האפליקציה. וגם
מתעלם מכל שיחה אל
Activity#setRequestedOrientation()
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
לא להגדיר את המניפסט
android:screenOrientation
או להגדיר את המאפיין כ-"user"
.הגדרת המניפסט
android:resizeableActivity
ל-true
.במסכים קטנים, כדי לתמוך בשינוי גודל האפליקציה בזמן השבתה של ריבוי חלונות עם
android:resizeableActivity=false
, מגדירים את סימון מטא-נתוניםandroid.supports_size_changes
ל-true
. לא להגדירminAspectRatio
וגםmaxAspectRatio
.
איך מבצעים אופטימיזציה של אפליקציות
הפעלת האפליקציה כך שתתמוך בכל הכיוונים. לא להגדיר screenOrientation
מפרט כלשהו במניפסט של האפליקציה. האפשרות של ביטול אפליקציית תמיכה
במצב ריבוי חלונות ולכל יחסי הגובה-רוחב של התצוגה על ידי הגדרת
המאפיין android:resizeableActivity
במניפסט של האפליקציה אל true
. צפייה
תמיכה בגדלים שונים של מסכים.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
דגלי מאפיינים שצריך לשנות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_ANY_ORIENTATION_TO_USER <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
הפעלת כיוון לאורך לכל הפעילויות בחבילה. אלא אם OVERRIDE_ANY_ORIENTATION מופעל, הביטול מופעל משמש רק אם לא צוין כיוון קבוע אחר על ידי הפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
דגלי מאפיינים שצריך לשנות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
מפעילה כיוון nosensor עבור כל הפעילויות חבילה. אלא אם כן OVERRIDE_ANY_ORIENTATION הוא מופעל, המערכת תשתמש בשינוי מברירת המחדל רק אם לא הוגדר כיוון קבוע אחר מצוין בפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
דגלי מאפיינים שצריך לשנות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
הפעלת כיוון להפוך לרוחב לכל הפעילויות ב החבילה. אלא אם כן OVERRIDE_ANY_ORIENTATION הוא מופעל, המערכת תשתמש בשינוי מברירת המחדל רק אם לא הוגדר כיוון קבוע אחר מצוין בפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
דגלי מאפיינים שצריך לשנות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
מגבלות OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR, וגם OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE השינויים ייכנסו לתוקף רק כשהחיבור למצלמה פעיל.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
דגלי מאפיינים שצריך לשנות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
מגביל את כיוון התצוגה לכיוון טבעי לרוחב כאשר התנאים הבאים מתקיימים:
- הפעילות במסך מלא
- ביטול ההסכמה של מאפיין רכיב
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
לא מופעל - ההגדרה של בקשת הכיוון להתעלמות מיצרן המכשיר מופעלת עבור להציג
- הכיוון הטבעי של המסך הוא לרוחב
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
לא ישים. צריך לפתור את הבעיה בלוגיקת האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
אל false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_ENABLE_COMPAT_IGNORE_HOWMANY_ORIENTATION
הפעלת מדיניות תאימות שמדלגת על עדכון כיוון האפליקציה בתגובה לאפליקציה
התקשרות אל Activity#setRequestedOrientation()
כשהאפליקציה
מופעלת מחדש או שיש בה טיפול פעיל לתאימות מצלמה.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
אל true
.
איך מבצעים אופטימיזציה של אפליקציות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
אל false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
הפעלת מדיניות התאימות שמתעלמת מהכיוון המבוקש של האפליקציה
תגובה לקריאה של האפליקציה
Activity#setRequestedOrientation()
יותר מפעמיים
תוך שנייה אחת אם פעילות אינה בפורמט letterbox בכיוון קבוע.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
לא ישים. צריך לפתור את הבעיה בלוגיקת האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
עד
false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_RESPECT_ בחירה_ORIENTATION
לא כולל חבילות מהתנהגות בקשת כיוון להתעלמות שניתן להפעיל על ידי יצרני מכשירים, לאזור תצוגה או למסך כולו.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
לא ישים. צריך לפתור את הבעיה בלוגיקת האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
פרטים נוספים זמינים בכתובת OVERRIDE_ANY_ORIENTATION
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
אין אפשרות לבטל את ההסכמה. השבתת השינוי מברירת המחדל עלולה להיות מסוכנת אם האפליקציה לא תואמת במכשיר שבו יצרן המכשיר שולח את בקשת הכיוון של המכשיר ההגדרה מופעלת. יצירת קשר עם מפתח Android יחסים כדי להשבית את הביטול.
דגלי מאפיינים שצריך לשנות
אין סימוני מאפיינים לשינוי הזה.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
NEVER_SANDBOX_DISPLAY_APIS
כך המערכת מאלצת חבילות לעולם לא להחיל ארגז חול (Sandbox) של Display
ל-API
לפעילות של מצב letterbox או של תאימות לגודל. ממשקי ה-API של Display
ימשיכו להציג את גבולות אזור התצוגה.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
להצהיר על פעילויות שניתן לשנות את הגודל שלהן באמצעות אחת מהאפשרויות
android:resizeableActivity
מאפיין מניפסט ל-true
או את דגל המטא-נתונים android.supports_size_changes
אל true
.
איך מבצעים אופטימיזציה של אפליקציות
אסור לאפליקציות שמצהירות בהן שניתן לשנות את גודלן באופן מלא על סמך גודל התצוגה
כדי למקם רכיבי ממשק משתמש. העברת האפליקציה לממשקי API עדכניים
לספק WindowMetrics
. אם אתם משתמשים ב-Jetpack פיתוח נייטיב,
WindowSizeClass
API כדי לשרטט את ממשק המשתמש על סמך כמות המסך
האזור שיש באפליקציה במסך הנוכחי. צפייה
סיווגים של גדלים בחלון.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
אין אפשרות לבטל את ההסכמה. העברה מממשקי API שהוצאו משימוש.
דגלי מאפיינים שצריך לשנות
אין סימוני מאפיינים לשינוי הזה.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
ALWAYS_SANDBOX_DISPLAY_APIS
אילוץ חבילות להחיל תמיד הרצה בארגז חול (Sandbox) של Display
ל-API
ללא קשר למצב עיבוד החלק הנצפה בלבד. ממשקי ה-API של Display
תמיד מספקים את גבולות האפליקציה.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
הצהרה על פעילויות שלא ניתן לשנות את הגודל שלהן על ידי הגדרה של
android:resizeableActivity
ל-false
או
סימון מטא-נתונים android.supports_size_changes
ל-false
.
איך מבצעים אופטימיזציה של אפליקציות
לאפליקציות שמוצהר בהן שניתן לשנות את גודלן באופן מלא אסור להסתמך אף פעם על גודל התצוגה כדי
מיקום רכיבי ממשק המשתמש. העברת האפליקציה מממשקי API שהוצאו משימוש אל
ממשקי API עדכניים שמספקים WindowMetrics
. צפייה
WindowMetricsCalculator
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
אין אפשרות לבטל את ההסכמה. העברה מממשקי API שהוצאו משימוש.
דגלי מאפיינים שצריך לשנות
אין סימוני מאפיינים לשינוי הזה.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
כך מאלצים חבילות לגבולות הפעילות ב-Sandbox של ממשקי ה-API הבאים של View
:
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
לפתור את הבעיה בקוד האפליקציה באמצעות ממשקי API שמספקים את הגבולות את חלון האפליקציה והקיזוזים ביחס לחלון האפליקציה במקום לגבולות מסך המכשיר והיסטים ביחס למסך המכשיר.
איך מבצעים אופטימיזציה של אפליקציות
המפתחים צריכים להשתמש בממשקי API של View
כדי להביא בחשבון את האפשרות של פורמט letterbox
ומצב ריבוי חלונות שמיושם באפליקציה. צפייה
WindowMetricsCalculator
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
אל false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
משביתה את הסיבוב של הכוח. שיפור חוויית המשתמש באפליקציות מסוימות.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
אל false
.
איך מבצעים אופטימיזציה של אפליקציות
אין להסתמך על הכיוון של חיישן המצלמה שנשמר במטמון או על מידע מהמכשיר. עבור הדרכה לגבי תאימות מצלמה, חדש: עינית המצלמה ותמיכה משטחים שניתן לשנות את גודלם במצלמה אפליקציה.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
אל true
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי, שמסיר את הסיבוב של כוח הסיבוב:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
כדי להסיר את הביטול, מה שמאפשר לבצע סיבוב כוח:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
משבית את רענון הפעילות לאחר רוטציה מאולצת. שיפור חוויית המשתמש כשרענון גורם לאובדן מצב באפליקציות.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
אל false
.
איך מבצעים אופטימיזציה של אפליקציות
צפייה OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
אל true
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי, שמסיר את רענון הפעילות:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
כדי להסיר את השינוי מברירת המחדל, שמאפשר רענון של הפעילות:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
יצירת החבילות שבהן נעשה שימוש לצורך רענון פעילות באמצעות onResume()
← onPause()
← מחזור אחד (onResume()
) במקום onResume()
←
onStop()
← onResume()
לאחר סיבוב כוח התאימות של המצלמה.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
אל true
.
איך מבצעים אופטימיזציה של אפליקציות
צפייה OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
אל false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
המערכת מאלצת חיתוך של פלט המצלמה לכיוון ההפוך במצב תצוגה לאורך. כיוון המצלמה לא תואם לכיוון הטבעי של המכשיר. אפליקציות רבות לא ניתן להתמודד עם המצב הזה ולהציג תמונות מתוחות אחרות.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
אל true
.
איך מבצעים אופטימיזציה של אפליקציות
צפייה OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
אל false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל, שמבצע חיתוך במצלמה הקדמית:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
כדי לבטל את השינוי, שמסיר את החיתוך של המצלמה הקדמית:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
מונע מאפליקציות לבטל את ההצטרפות לשיתוף מסך של אפליקציה (ראו
הקרנת מדיה). מיושם כאשר אפליקציות מנצלות לרעה את
API של createConfigForDefaultDisplay()
לאילוץ
לבצע צילום מסך מלא ולסכן את פרטיות המשתמשים על ידי חשיפת התוכן.
של התראות, שמתועדות במסך מלא אבל לא במסך האפליקציה
שיתוף וכל האפליקציות, ללא קשר למצב של עיבוד החלק הנצפה בלבד.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
הפעלה של התנהגות הקרנת המדיה שמוגדרת כברירת מחדל (מוטמעת ב-Android 14, API
רמה 34, עם createScreenCaptureIntent()
),
שמאפשר למשתמשים להחליט אם לשתף את המסך המלא או אפליקציה אחת
חלון ללא קשר למצב החלון. אפשר גם להתקשר
createScreenCaptureIntent(MediaProjectionConfig)
עם ארגומנט MediaProjectionConfig
שהוחזר
קריאה אל createConfigForUserChoice()
.
איך מבצעים אופטימיזציה של אפליקציות
המשתמשים יכולים לבחור אם לשתף את כל תצוגת המכשיר או אפליקציה חלון במהלך הקרנת מדיה, שהחל מ-Android 14 היא התנהגות ברירת המחדל.
הגדרת אפשרות לשינוי גודל האפליקציה (resizeableActivity="true"
) לצורך
תמיכה במצב ריבוי חלונות.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
עקב החומרה של פרטיות המשתמשים, האפליקציה שלך לא יכולה להשבית או לבטל את ההסכמה של השינוי הזה.
דגלי מאפיינים שצריך לשנות
ללא.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל, האפליקציה מבטלת את ההסכמה של האפליקציה לשיתוף מסך חלקי (כלומר, מאפשר שיתוף מסך חלקי):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
כדי להסיר את השינוי מברירת המחדל, שמאפשר לאפליקציה לבטל את ההסכמה להצגה במסך חלקי שיתוף:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
הפעלת מיקוד מזויף באפליקציות לא ממוקדות במצב מסך מפוצל. במידה מסוימת מנועי משחקים ממתינים למיקוד לפני שהם משרטטים את התוכן של האפליקציה. וכך, מיקוד מזויף עוזר לאפליקציות למנוע מצב שבו הן ייחשפו בזמן ההפעלה שלהן מחדש עדיין נמצאים במוקד.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
עד
true
איך מבצעים אופטימיזציה של אפליקציות
אפשר למנוע את הבעיה הזו אם האפליקציה משתמשת בכמה כיוונים משתנה היטב. כדי להגדיר את האפליקציה למסך גדול, פועלים לפי ההוראות הבאות: הנחיות בנושא איכות האפליקציות למסכים גדולים.
אם אתם מפעילים את מנוע המשחק של Unity, יש לשדרג לגרסה 2019.4.40 ואילך.
לייצא מחדש את המשחק. שמירת האפשרות Resizable Window
ביצעת צ'ק-אין בנגן Android
הגדרות.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
הגדרת דגל המאפיין
PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
עד
false
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
מקורות מידע נוספים
- הנחיות בנושא איכות האפליקציות למסכים גדולים
- הנחיות לאיכות האפליקציות המרכזיות