מערכת Android מפעילה מצב תאימות לאפליקציות שמצהירות על הגבלות לגבי הכיוון או שינוי הגודל. מצב תאימות מבטיח שהאפליקציה תפעל בצורה תקינה במכשירים עם מסך גדול, בטלפונים מתקפלים ובסביבות של מחשבים, אבל חוויית השימוש לא תהיה אופטימלית.
שינויים ידניים לכל אפליקציה מאפשרים ליצרני מכשירים, לבעלי מכשירים וירטואליים1 ולמשתמשים לשנות את ההתנהגות של האפליקציה כדי לשפר את הפריסה שלה או למנוע תקלות באפליקציות במכשירים נבחרים.
Android 16
ב-Android 16 (רמת API 36), המערכת מתעלמת מהגבלות על כיוון המסך, יחס הגובה-רוחב והיכולת לשנות את גודל האפליקציה, כדי לשפר את הפריסה של האפליקציות בגורמי צורה עם רוחב מינימלי של 600dp ומעלה.
ההגדרות הבאות לשינוי ברירת המחדל לכל אפליקציה לא פועלות באפליקציות שמטרגטות לרמת ה-API המיועדת 36:
- FORCE_RESIZE_APP
- FORCE_NON_RESIZE_APP
- OVERRIDE_MIN_ASPECT_RATIO
- OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY
- OVERRIDE_MIN_ASPECT_RATIO_MEDIUM
- OVERRIDE_MIN_ASPECT_RATIO_LARGE
- OVERRIDE_MIN_ASPECT_RATIO_TO_ALIGN_WITH_SPLIT_SCREEN
- OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN
- OVERRIDE_ANY_ORIENTATION
- OVERRIDE_ANY_ORIENTATION_TO_USER
- OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT
- OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR
- OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE
- OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
- OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
- OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
- OVERRIDE_RESPECT_REQUESTED_ORIENTATION
ביטול ההסכמה
האפליקציה יכולה לטרגט את רמת ה-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>
אם האפליקציה מטרגטת ל-Android 16 (רמת API 36) ומעלה, המאפיין הזה לא נועל את כיוון התצוגה ולא מונע את סיבוב המסך במסכים גדולים.
מכשירי בדיקה וירטואליים
יכול להיות שבמכשירים הבאים יהיה צורך בהגדרות ספציפיות לכל אפליקציה בגלל הגדרות חריגות או הגדרות שלא נתמכות היטב על ידי אפליקציות:
- טאבלטים: הכיוון הטבעי של חלק מהטאבלטים, כמו Pixel Tablet, הוא לרוחב. המכשיר נמצא באוריינטציה הטבעית שלו כש-
Display#getRotation()מחזיר את הערךSurface.ROTATION_0. אם האפליקציות מניחות ש-ROTATION_0הוא לאורך, יכול להיות שהפריסות של האפליקציות והתצוגה המקדימה של המצלמה לא יתאימו לתצוגת המכשיר. - מכשירים מתקפלים לרוחב: מכשירים מתקפלים מסוימים, כמו Pixel Fold, נמצאים בכיוון לאורך כשהם מקופלים, אבל בכיוון לרוחב כשהם פתוחים. אם האפליקציות מניחות שהכיוון במצב פתוח הוא לאורך, סביר להניח שיהיו לולאות הבהוב או בעיות בפריסה.
- טלפונים מתקפלים: טלפונים מתקפלים פתוחים בדרך כלל בכיוון לאורך. אבל כשהם מקופלים, בדרך כלל יש להם מסך קטן בכיוון לרוחב. האפליקציות צריכות לזהות את הכיוונים השונים של המסכים ולהתאים את עצמן אליהם.
- מסכים חיצוניים: במכשירים נבחרים אפשר להפעיל סשן של ממשק מחשב במסכים חיצוניים מחוברים. האפליקציות צריכות לשלוח שאילתות למסכים חיצוניים כדי לקבל מידע כמו גודל המסך והרזולוציה. אחרת, האפליקציות עלולות להניח הנחות שגויות לגבי המסכים, מה שעלול להוביל להתנהגות שגויה של האפליקציה.
- מסכים ברכב: הרבה מסכים ברכב הם לרוחב, אבל לא כולם. פיתוח אפליקציות לשימוש בזמן חניה למסכים ברכב דומה לפיתוח לטאבלטים.
בעיות תאימות נפוצות
בדרך כלל, בעיות תאימות בחוויית השימוש באפליקציה נגרמות בגלל הגבלות על כיוון האפליקציה, הגבלות על שינוי הגודל ויחס הגובה-רוחב, טיפול שגוי בכיוון התצוגה המקדימה של המצלמה ושימוש שגוי בממשקי API.
Letterboxing חפשו את המטמון
במצב הזה, האפליקציה מוצגת במרכז המסך, או בצד אחד של המסך במכשירים עם מסכים גדולים, כדי שיהיה נוח לגשת אליה. השטח הלא מנוצל של התצוגה בצדדים או בחלק העליון והתחתון של האפליקציה מתמלא במט (פסים בצבע אחיד או טפט מטושטש).
התופעה הזו מתרחשת לעיתים קרובות במכשירים עם מסך גדול, כי המידות ויחס הגובה-רוחב של המסך במכשיר בדרך כלל שונים מאלה של טלפונים רגילים, שרוב האפליקציות מיועדות להם.
איור 1. אפליקציה שמוגבלת לכיוון לאורך מוצגת עם פסים שחורים בטאבלט ובמכשיר מתקפל במצב לרוחב.
בעיה
האפליקציה לא תומכת בכל הגדרות התצוגה כי יש לה כיוון קבוע, יחס גובה-רוחב קבוע או שאי אפשר לשנות את הגודל שלה.
הגדרות אישיות שקובעות את כיוון המסך ואת האפשרות לשנות את הגודל של האפליקציה כוללות את אלה:
screenOrientation: מציין כיוון קבוע לאפליקציה. אפשר גם להגדיר את הכיוון של האפליקציות בזמן הריצה באמצעותActivity#setRequestedOrientation().
resizeableActivity: מציין אם המערכת יכולה לשנות את הגודל של האפליקציות כדי להתאים אותן לחלונות בגדלים שונים. ב-Android 11 (רמת API 30) ומטה, מציין אם האפליקציות תומכות במצב ריבוי חלונות. ב-Android מגרסה 12 (רמת API 31) ואילך, ההגדרה קובעת אם האפליקציות תומכות במצב ריבוי חלונות במסכים קטנים (גודל חלון קומפקטי). ב-Android מגרסה 12 ואילך, האפליקציות תומכות במצב ריבוי חלונות במסכים גדולים (בגודל חלון בינוני או מורחב) בלי קשר להגדרה הזו.
maxAspectRatio: מציין את יחס הגובה-רוחב המקסימלי שהאפליקציה תומכת בו. רק אפליקציות שבהןresizeableActivityמוגדר ל-falseיכולות להגדיר אתmaxAspectRatio.
minAspectRatio: מציין את יחס הגובה-רוחב המינימלי שהאפליקציה תומכת בו. רק אפליקציות שבהןresizeableActivityמוגדר כ-falseיכולות להגדיר אתminAspectRatio.
אפליקציה שמוגבלת לכיוון לאורך לא ניתנת לשימוש במכשיר בכיוון לרוחב.
אופטימיזציה
האפליקציה צריכה לתמוך בכל הגדלים והכיוונים של המסך במכשיר ובמצב ריבוי חלונות. מסירים את כל ההגבלות על הכיוון ועל יחס הגובה-רוחב הקבוע מהפריסות של האפליקציה ומקובץ המניפסט של האפליקציה.
האפליקציה תומכת בכל כיווני המכשיר.
פתרון עקיף לבעיית תאימות
אם אפליקציה עם כיוון קבוע או יחס גובה-רוחב קבוע פועלת בחלון שבו האפליקציה לא תומכת ישירות בגודל החלון או בכיוון, מערכת Android מוסיפה לאפליקציה פסים שחורים כדי לשמור על המשכיות.
החל מ-Android 12 (רמת API 31) ובהמשך ב-12L (רמת API 32), הפלטפורמה מחילה מגוון שיפורים על אפליקציות בפורמט letterbox. יצרני המכשירים מטמיעים את השיפורים בממשק המשתמש. לא צריך לבצע פעולות פיתוח נוספות באפליקציה כדי ליהנות מהשיפורים.
ב-Android 12 (רמת API 31) נוספו השיפורים האסתטיים הבאים, שיצרני המכשירים יכולים להגדיר:
- פינות מעוגלות: הפינות של חלון האפליקציה מעוצבות בצורה מעודנת יותר.
- שקיפות של סרגל המידע: שורות הסטטוס וסרגלי הניווט, שמופיעים כשכבת-על באפליקציה, הם שקופים למחצה, כך שהסמלים בסרגלים תמיד גלויים על רקע ה-letterbox.
- יחס גובה-רוחב שניתן להגדרה: אפשר לשנות את יחס הגובה-רוחב של האפליקציה כדי לשפר את המראה שלה.
איור 2. אפליקציה בפורמט letterbox עם שיפורים בממשק המשתמש.
ב-12L (רמת API 32) נוספו השיפורים הפונקציונליים הבאים:
מיקום שניתן להגדרה: במסכים גדולים, יצרני המכשירים יכולים למקם את האפליקציה בצד שמאל או בצד ימין של המסך, כדי שיהיה קל יותר להשתמש בה.
לחצן הפעלה מחדש בעיצוב חדש: יצרני המכשירים יכולים לתת ללחצן ההפעלה מחדש של מצב תאימות הגודל מראה חדש כדי שהמשתמשים יזהו אותו בקלות רבה יותר.
ב-Android 13 (רמת API 33) נוספה תיבת דו-שיח להדרכת משתמשים לגבי מיקום האפליקציה בפורמט letterbox במסך או הכללת תיבת הדואר במצב מסך מפוצל:
איור 3. אפליקציה בפורמט letterbox עם תיבת דו-שיח עם הסבר למשתמש.
מצב תאימות גודל
מצב תאימות לגודל הוא מצב של הוספת פסים שחורים ששומר על יחס הגובה-רוחב של האפליקציה וכולל אמצעי בקרה להפעלה מחדש. הפקד מאפשר למשתמשים להפעיל מחדש את האפליקציה ולרענן את התצוגה. מערכת Android מפעילה מצב תאימות לגודל באפליקציות שלא ניתן לשנות את הגודל שלהן. כשפעילות עוברת למאגר תצוגה שלא תואם לממדים של הפעילות, יכול להיות שהמערכת תשנה את קנה המידה של האפליקציה כדי למלא את מסך המכשיר בממד אחד לפחות.
שינויים בהגדרות המכשיר שיכולים להפעיל את מצב התאימות לגודל כוללים:
- סיבוב המכשיר
- מכשיר מתקפל במצב מקופל או לא מקופל
- מעבר בין מצבי תצוגה של מסך מלא ומסך מפוצל
בעיה
מצב תאימות גודל חל בדרך כלל על פעילויות שמוגבלות בכיוון או ביחס הגובה-רוחב, ומוגדרות (או נקבעות על ידי המערכת) ככאלה שלא ניתן לשנות את הגודל שלהן.
האפליקציה נחשבת ככזו שאפשר לשנות את הגודל שלה, והיא לא תועבר למצב תאימות גודל, אם היא עומדת באחד מהקריטריונים הבאים:
- אפשר לשנות את הגודל באמצעות
resizeableActivity="true" - תמיכה במצב תמונה בתוך תמונה (PIP)
- מוטמע
- ההגדרה
FORCE_RESIZE_APPחלה על כל אפליקציה בנפרד על ידי יצרן המכשיר (המערכת מתעלמת מהמאפיינים שהוגדרו על ידי האפליקציה)
אם האפליקציה לא עומדת באף אחד מהתנאים, היא נחשבת כאפליקציה שלא ניתן לשנות את הגודל שלה, ויכול להיות שהיא תועבר למצב תאימות גודל.
אפליקציה שלא ניתן לשנות את הגודל שלה קורסת במצב ריבוי חלונות.
אופטימיזציה
האפליקציה צריכה לתמוך בכל גודלי המסכים. כדי לאפשר שינוי של גודל האפליקציה, צריך להגדיר את המאפיין android:resizeableActivity של הרכיב <activity> או <application> לערך true בקובץ המניפסט של האפליקציה. עצבו פריסות רספונסיביות/דינמיות לאפליקציה. מידע נוסף זמין במאמרים תמיכה בגדלים שונים של מסכים ותמיכה במצב ריבוי חלונות.
האפליקציה פועלת בכל גודל של חלון.
פתרון עקיף לבעיית תאימות
מערכת Android מעבירה אפליקציה למצב תאימות לגודל כשהיא קובעת שאפשר לשפר את התצוגה של האפליקציה בפורמט letterbox על ידי שינוי קנה המידה של האפליקציה כך שתמלא את חלון התצוגה במאפיין אחד לפחות. המערכת מציגה אמצעי בקרה להפעלה מחדש, שיוצר מחדש את תהליך האפליקציה, את הפעילות ואת התצוגה. כדאי לעיין גם בסקירה הכללית על תהליכים ושרשורים.
אפליקציה שמוצגת רק לאורך, מוצגת עם פסים שחורים בצדדים בפריסה לרוחב, ומשנה את הגודל שלה באמצעות פקד ההפעלה מחדש.
מצב תאימות של המסך
מצב תאימות תצוגה מונע הפעלה מחדש של אפליקציה כשהיא עוברת בין מסכים שונים, מה שיכול להפעיל שינוי בהגדרות האישיות, כמו שינוי במצב הצבע, בזמינות של מסך המגע או בצפיפות המסך.
מצב התאימות של המסך מופעל כברירת מחדל במשחקים (על סמך הדגל 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().
אופטימיזציה
אסור שהאפליקציות:
- צריך להגדיר כיוון ברירת מחדל באמצעות
Activity#setRequestedOrientation()ב-methodonCreate()של הפעילות, כי בקשת הכיוון יכולה להיות מופעלת באופן בלתי צפוי על ידי שינויי הגדרות שלא טופלו - נניח שהאוריינטציה הטבעית של המכשיר (
ROTATION_0) היא לאורך - הגדרת הכיוון על סמך אותות שלא קשורים לגודל החלון הנוכחי, כמו
Display#getRotation(), נוכחות שלFoldingFeatureאו ממשקי API שהוצאו משימוש.
האפליקציה מטפלת בשינוי בהגדרות, אין לה הגבלות על כיוון המסך, ולכן היא לא נכנסת ללולאת הבהוב.
פתרון עקיף לבעיית תאימות
מערכת Android מתעלמת מקריאות ל-Activity#setRequestedOrientation() במצבים הבאים:
הפעילות כבר הופעלה מחדש מקריאה קודמת ל-method, או שהופעל הטיפול בסיבוב מאולץ של תאימות המצלמה (ראו תצוגה מקדימה של המצלמה בהמשך).
יצרני מכשירים יכולים להחיל את ההתנהגות הזו על אפליקציה באמצעות
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION.הפעילות שלחה יותר משתי בקשות לשינוי כיוון בשנייה אחת, מה שמעיד על כך שהתרחשה לולאה. מבין שתי הבקשות בלולאה, Android משתמש בבקשה שמגדילה את אזור התצוגה של האפליקציה.
יצרני מכשירים יכולים להחיל את ההתנהגות הזו על אפליקציה באמצעות
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED.הבעלים של המכשירים הווירטואליים ביטלו את הפעלת ה-method במכשירים נבחרים.
תצוגה מקדימה של המצלמה
התצוגה המקדימה של המצלמה (או תצוגת הצילום) באפליקציות של מצלמות עלולה להיות מעוותת או לא מיושרת בטאבלטים, במחשבים ניידים ובמסכים מתקפלים.
אפשר לעיין גם במאמר תצוגה מקדימה של המצלמה בממשק המחשב.
בעיה
במסמך הגדרת התאימות (CDD) של Android מצוין שחיישן התמונה של המצלמה "חייב להיות מכוון כך שהממד הארוך של המצלמה יתיישר עם הממד הארוך של המסך".
באפליקציות רבות, ההנחה היא שכיוון המכשיר וכיוון החיישן של המצלמה הם לאורך – הנחה סבירה בטלפונים ניידים רגילים. אבל הכיוון הטבעי של טאבלטים ומחשבים ניידים וחיישני המצלמה שלהם יכול להיות לרוחב. בנוסף, לגורמי צורה חדשים כמו מכשירים מתקפלים יכולים להיות כמה כיוונים טבעיים וכמה חיישני מצלמה בכיוונים שונים.
אם מתחילים פעילות עם כיוון מצלמה שהאפליקציה לא מצפה לו, או אם עוברים בין מצלמות או מסכים שונים (במכשירים מתקפלים), התצוגה המקדימה של המצלמה עלולה להיות מעוותת או לא מיושרת.
תצוגה מקדימה מעוותת ולא מיושרת של המצלמה במכשיר מתקפל עם מסך גדול.
אופטימיזציה
אפליקציות מצלמה צריכות לזהות ולנהל בצורה נכונה את כיוון המכשיר ואת כיוון חיישן המצלמה כדי להציג תצוגה מקדימה של המצלמה בקנה מידה ובכיוון הנכונים. האפליקציות צריכות לחשב את סיבוב המכשיר, סיבוב החיישן ויחס הגובה-רוחב של המסך או החלון, ואז להחיל את התוצאות על התצוגה המקדימה של המצלמה. למידע נוסף, קראו את המאמרים תצוגה מקדימה של המצלמה והיכרות עם תצוגת הצילום.
התצוגה המקדימה של המצלמה מיושרת ומוצגת בקנה מידה נכון בכל כיווני המכשיר.
פתרון עקיף לבעיית תאימות
המכשיר נמצא באוריינטציה הטבעית שלו כש-Display#getRotation() מחזיר את הערך Surface.ROTATION_0. המערכת מחשבת את
CameraCharacteristics.SENSOR_ORIENTATION
לפי הכיוון הטבעי של המכשיר. מערכת Android מיישרת את החלון לאורך של אפליקציות שמוגבלות לכיוון לאורך עם הכיוון הטבעי של המכשיר, וזה מה שרוב האפליקציות מצפות לו. בנוסף, מערכת Android חותכת את התמונה מחיישן המצלמה כשהחיישן נמצא במצב תצוגה לרוחב והתצוגה המקדימה של המצלמה נמצאת במצב תצוגה לאורך. הפתרונות העקיפים הספציפיים כוללים:
סיבוב מאולץ של תצוגות מקדימות של המצלמה באפליקציות שמוגבלות לתצוגה לאורך: באפליקציות שמוגבלות לתצוגה לאורך, הכיוון הטבעי של המכשיר וכיוון חיישן המצלמה צריכים להיות לאורך. עם זאת, ב-Android 12 (רמת API 31) ואילך, אפליקציות יכולות לפעול בכמה כיווני מכשיר אם יצרני המכשירים מתעלמים מהמפרט של הכיוון.
כשאפליקציה שמוגבלת למצב לאורך מחוברת למצלמה, מערכת Android מסובבת את האפליקציה כדי להתאים את החלון של האפליקציה במצב לאורך לכיוון הטבעי של המכשיר.
בטאבלטים מסוימים (ראו מכשירי בדיקה וירטואליים), החלון לאורך של האפליקציה מסתובב למסך מלא לאורך כדי להתאים לכיוון הטבעי של המכשיר. האפליקציה תופסת את כל המסך אחרי סיבוב מאולץ.
טאבלט – סיבוב מאולץ של אפליקציה שמוגבלת למצב לאורך.
במסך הפנימי לרוחב של מכשירים מתקפלים (ראו מכשירי בדיקה וירטואליים), פעילויות לאורך בלבד מסובבות לרוחב כדי להתאים לכיוון הטבעי של המכשיר כשהוא פתוח. האפליקציה מוצגת בפורמט Letterbox אחרי סיבוב מאולץ.
מכשיר מתקפל – סיבוב מאולץ של אפליקציה שמוגבלת למצב לאורך. האפליקציה מוצגת גם עם פסי שוליים.
חיתוך המצלמה הקדמית הפנימית: חיישן המצלמה הקדמית הפנימית בחלק מהמכשירים המתקפלים נמצא בכיוון לרוחב. בנוסף לסיבוב הכפוי של התצוגה המקדימה של המצלמה במסך הפנימי המתקפל, Android חותכת את שדה הראייה של המצלמה הקדמית הפנימית (לרוחב) כך שהחיישן מצלם תצוגה הפוכה לכיוון המכשיר.
אילוץ רענון של התצוגה המקדימה של המצלמה: המערכת עוברת בין שיטות הפעילות
onStop()ו-onStart()(כברירת מחדל) אוonPause()ו-onResume()(מופעלות על ידי שינוי ברירת המחדל לכל אפליקציה OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE) אחרי אילוץ סיבוב כדי לוודא שהתצוגה המקדימה של המצלמה מוצגת כמו שצריך.שינוי קנה המידה של יחס הגובה-רוחב: המערכת משנה באופן דינמי את יחס הגובה-רוחב של התצוגה המקדימה של המצלמה שסובבה באופן מאולץ ליחס גובה-רוחב מינימלי גבוה יותר, כדי להבטיח שהתצוגה המקדימה של המצלמה תהיה בקנה מידה תקין.
מפתחי אפליקציות יכולים לשנות את הפתרונות האלה אם האפליקציות מטפלות בתצוגה המקדימה של המצלמה בצורה נכונה. מידע נוסף על שינוי הגדרות לכל אפליקציה
ממשקי API שנעשה בהם שימוש לרעה לעיתים קרובות
ככל שנוספה למערכת Android תמיכה בתכונות כמו מצב ריבוי חלונות ובמכשירים כמו מכשירים מתקפלים, ממשקי API מדור קודם הוצאו משימוש והוחלפו בממשקי API עדכניים שפועלים בכל גודלי המסכים ובכל סוגי המכשירים. עם זאת, ממשקי ה-API שהוצאו משימוש עדיין זמינים לצורך תאימות לדורות קודמים.
חלק מממשקי ה-API של View מיועדים למטרות מיוחדות, שלא תמיד מובנות למפתחים.
בעיה
מפתחים ממשיכים להשתמש בממשקי API של Display שהוצאו משימוש, ומניחים באופן שגוי שממשקי ה-API מחזירים את גבולות האפליקציה במקום את גבולות אזור התצוגה של המכשיר. או שמפתחים משתמשים בטעות בממשקי API של תצוגה למטרות מיוחדות כדי לקבל מדדי תצוגה כלליים.
כתוצאה מכך, מתרחשות שגיאות בחישובים כשמשנים את המיקום של רכיבים בממשק המשתמש אחרי אירועים של שינוי גודל חלון האפליקציה, וזה גורם לבעיות בפריסה.
ממשקי API לתצוגה שאינם בשימוש נכון ונפוצים:
מידע נוסף זמין במאמר תמיכה במצב ריבוי חלונות.
שימוש לרעה בממשקי API של תצוגות:
ממשק API שהוצא משימוש מחשב באופן שגוי את גבולות האפליקציה. תוכן האפליקציה חורג מהמסך.
אופטימיזציה
אף פעם אל תסתמכו על גודל התצוגה הפיזי כדי למקם רכיבים בממשק המשתמש. מעבירים את האפליקציה לממשקי API שמבוססים על WindowMetrics, כולל ממשקי ה-API הבאים של WindowManager:
פלטפורמה:
Jetpack:
ה-API מחשב בצורה נכונה את המדדים של חלון האפליקציה.
פתרון עקיף לבעיית תאימות
שני שינויים מתאימים את ממשקי ה-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) של המשימה. עם זאת, פעילות אטומה שמפעילה תיבת דו-שיח של הרשאה יכולה להיות טרמפולינה (פעילות שמפעילה פעילות אחרת ואז נעלמת). לכן, המערכת לא יכולה לקבוע את הגבולות של פעילות הטרמפולינה שהפעילה את פעילות תיבת הדו-שיח השקופה של ההרשאה.
תיבת הדו-שיח לא ממוקמת נכון כי הפעילות הופעלה מטרמפולינה.
אופטימיזציה
פעילויות שקופות מקבלות את האילוצים שלהן מהפעילות האטומה העליונה ביותר שמתחתיהן ברשימת הפעילויות של המשימה. הפעילות האטומה חייבת להיות זמינה לכל אורך מחזור החיים של הפעילות השקופה, מיצירת הפעילות ועד להשמדה שלה. לכן, אל תפעילו בקשות הרשאה מפעילויות טרמפולינה.
אם פעילות טרמפולינה מפעילה בקשת הרשאה, יכול להיות שהמשתמש לא יוכל לראות את תיבת הדו-שיח של ההרשאה כי פעילות הטרמפולינה תושמד לפני שלמשתמש תהיה הזדמנות להגיב לתיבת הדו-שיח, ויכול להיות שהממדים והמיקום של פעילות תיבת הדו-שיח חושבו באופן שגוי.
האפליקציות צריכות תמיד להפעיל בקשות הרשאה מפעילויות שנשארות גלויות עד שהמשתמש מחליט אם לתת הרשאה או לא.
פינות מעוגלות
פעילות יכולה להיות שקופה בגלל סגנון שמציין שקיפות ברקע, או בגלל שהתוכן של הפעילות לא ממלא את שטח התצוגה הזמין. אם פעילות שקופה ממלאת את שטח התצוגה הזמין, המערכת מעגלת את הפינות של הפעילות באופן אוטומטי, אם יצרן המכשיר הגדיר זאת. אבל אם פעילות שקופה (כמו תיבת דו-שיח של הרשאות) לא ממלאת את השטח הזמין, אתם צריכים להחליט אם להחיל פינות מעוגלות או לא.
תיבות הדו-שיח של ההרשאות לא ממלאות את שטח התצוגה הזמין כי בדרך כלל הפריסה של תיבת הדו-שיח משתמשת ב-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 Player, אחרת המשחק יושהה כשהוא לא במוקד, גם אם הוא גלוי לגמרי במצב ריבוי חלונות.
המשחק מעבד את התוכן בצורה נכונה במצב ריבוי חלונות, גם כשהוא לא במוקד.
פתרון עקיף לבעיית תאימות
יצרני מכשירים יכולים להחיל את השינוי הידני OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS לכל אפליקציה כדי לספק אירוע מיקוד מזויף לאפליקציה במצב ריבוי חלונות. השינוי מאפשר לפעילות לשרטט מחדש את התוכן ולא להסתיר אותו.
ממשק מחשב
כשאפליקציות פועלות בסביבת ממשק מחשב, יכול להיות שהן ייתקלו במצבי תאימות נוספים.
אפליקציות עם כיוון נעול ניתנות לשינוי גודל באופן חופשי. גם אם הפעילות נעולה לכיוון לאורך, המשתמשים עדיין יכולים לשנות את גודל האפליקציה לכיוון לרוחב.
עדיין אפשר לשנות את הגודל של אפליקציות עם כיוון נעול.
עם זאת, אם פעילות מוגדרת ככזו שלא ניתן לשנות את הגודל שלה (resizeableActivity = false), ממשק המשתמש של הפעילות משתנה תוך שמירה על אותו יחס גובה-רוחב.
פעילויות שהוגדרו ככאלה שלא ניתן לשנות את הגודל שלהן, קנה המידה של ממשק המשתמש שלהן משתנה.
תצוגה מקדימה של המצלמה בממשק המחשב
כשאפליקציה פועלת בממשק מחשב, כיוון המסך וכיוון החלון יכולים להיות שונים מאלה שמופיעים במסך מלא בטלפונים רגילים.
בעיה
באפליקציות רבות מניחים שכיוון המכשיר וכיוון חיישן המצלמה הם לאורך, מה שעלול לגרום לתצוגה מקדימה לא מיושרת או מעוותת של המצלמה.
אופטימיזציה
אפליקציות מצלמה צריכות לזהות ולנהל בצורה נכונה את כיוון המכשיר ואת כיוון חיישן המצלמה כדי להציג תצוגה מקדימה של המצלמה בקנה מידה ובכיוון הנכונים. האפליקציות צריכות לחשב את סיבוב המכשיר, סיבוב החיישן ויחס הגובה-רוחב של החלון, ואז להחיל את התוצאות על התצוגה המקדימה של המצלמה, שצריכה גם להגיב לשינויים בהגדרות החלון. להנחיות מפורטות, אפשר לעיין במאמר תצוגה מקדימה של המצלמה.
פתרון עקיף לבעיית תאימות
כשאפליקציות עם כיוון קבוע בממשק המחשב מפעילות תצוגה מקדימה של המצלמה, המערכת עשויה להפעיל טיפול בתאימות המצלמה כדי למנוע תצוגות מקדימות מתוחות ומוטות הצידה.
הטיפול יוצר סביבת ארגז חול שתואמת לכיוון המבוקש בדרכים הבאות:
הוספת פסי שוליים לחלון האפליקציה בהתאם לכיוון המבוקש: כדי למנוע בעיות של מתיחה בגלל שינוי קנה מידה לא מתאים.
הפעלת סיבוב המסך בארגז חול: הטיפול מדמה את המכשיר כשהוא מונח בכיוון המבוקש. ההנחה השגויה הנפוצה ביותר לגבי תצוגות מקדימות של המצלמה היא שהאפליקציה פועלת במכשיר לאורך. לכן, סיבוב התצוגה מוגבל לארגז חול של 0 מעלות באפליקציות שמבקשות כיוון לאורך, ו-90 מעלות במכשירים שמבקשים כיוון לרוחב.
חיתוך המצלמה: אם כיוון המסך השתנה, זה משתקף בפיד המצלמה: אם המכשיר נמצא בכיוון לרוחב והטיפול מופעל באפליקציה שמבקשת כיוון לאורך, שדה הראייה של המצלמה נחתך כדי להידמות לזה של מצלמה בכיוון לאורך.
סיבוב וחיתוך של פיד המצלמה: המערכת עוברת בין שיטות הפעילות
onStop()ו-onStart()(כברירת מחדל) אוonPause()ו-onResume()(מופעלות על ידי שינוי ברירת המחדל של OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE לכל אפליקציה) אחרי שהטיפול מופעל כדי לוודא שהתצוגה המקדימה של המצלמה מוצגת כראוי.
מפתחי אפליקציות יכולים לשנות את הפתרונות האלה אם האפליקציות מטפלות בתצוגה המקדימה של המצלמה בצורה נכונה. מידע נוסף על שינוי הגדרות לכל אפליקציה
מתבצע שינוי גודל
כשהטיפול המדומה בבקשה לשינוי כיוון המסך פעיל, שינוי גודל החלון משנה את קנה המידה של ממשק המשתמש של תצוגת הצילום תוך שמירה על יחס הגובה-רוחב שלו. אפשר לשנות את הגודל של שאר חלון האפליקציה באופן חופשי.
שינוי גודל של חלון עם תצוגת צילום של מצלמה
איך בודקים אם יש באפליקציה בעיות תאימות
כדי לבדוק את האפליקציה ולהבין איך היא פועלת בגורמי צורה שונים, כדאי להשתמש במקורות המידע הבאים:
- העברת נתונים ממכשירים: כדי לבדוק את האפליקציה במכשירי ייצור (כולל מכשירי בדיקה וירטואליים) שמתארחים במרכזי הנתונים של Google, קראו את המאמר העברת נתונים ממכשירי Android, באמצעות Firebase .
- אמולטורים ב-Android Studio: במאמר יצירה וניהול של מכשירים וירטואליים מוסבר איך ליצור אמולטורים למכשירי בדיקה וירטואליים.
- אמולטור עם אפשרות לשינוי גודל ב-Android Studio: במאמר איך מריצים אפליקציות באמולטור Android מוסבר איך לגשת למכשירים וירטואליים.
הסרטון בפורמט 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(); }
לאחר מכן, מריצים בדיקה כדי לאמת את ההתנהגות ולוודא שהפעילות המטורגטת לא מוצגת בפורמט Letterbox:
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 Debug Bridge (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 | ההגדרה הזו קובעת שהתצוגה תהיה קבועה לרוחב כשהמשימה מוצגת במסך מלא (כולל במצב Letterbox). | |
| OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION | 254631730 | המערכת מתעלמת מבקשות לשינוי כיוון המסך מהאפליקציה כדי למנוע לולאות אינסופיות של סיבוב המסך. | |
| OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | המערכת מתעלמת מבקשות חוזרות לשינוי כיוון המסך בזמן שפעילות מופעלת מחדש. אם מערכת Android מזהה שאפליקציה מבקשת לפחות שני כיוונים חדשים בתוך שנייה אחת, המערכת מחשיבה את זה כלולאה אינסופית של סיבוב ומפעילה את השינוי. | |
| OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | מונעת הוספת פסים שחורים על ידי השבתת ההגדרה של יצרן המכשיר להתעלמות מבקשות לשינוי כיוון המסך. | |
| ממשקי API של ארגז חול (sandbox) | NEVER_SANDBOX_DISPLAY_APIS | 184838306 | מונעת שינוי של ההתנהגות של ממשקי API לתצוגה. |
| ALWAYS_SANDBOX_DISPLAY_APIS | 185004937 | מאלץ את ממשקי ה-API של Display באפליקציה להחזיר את גבולות האפליקציה. ממשקי ה-API של Display מחזירים גבולות לוגיים של אזור התצוגה, אבל לפעמים האפליקציה מניחה שממשקי ה-API של Display מחזירים גבולות של האפליקציה, מה שמוביל לבעיות בממשק המשתמש. |
|
| OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS | 237531167 | מאלץ את ממשקי ה-API של View שמשמשים באפליקציה להחזיר את גבולות האפליקציה. ממשקי ה-API של View מחזירים גבולות לוגיים של אזור התצוגה, אבל לפעמים האפליקציה מניחה שממשקי ה-API של View מחזירים גבולות של האפליקציה, מה שמוביל לבעיות בממשק המשתמש. |
|
| תאימות המצלמה | OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION | 263959004 | השבתת הסיבוב הכפוי. כברירת מחדל, כל אפליקציות המצלמה עם כיוון קבוע מסובבות באופן מאולץ כשהתצוגה המקדימה של המצלמה פתוחה. |
| OVERRIDE_CAMERA_COMPAT_DISABLE_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_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS | 388014743 | ההגדרה הזו מחריגה את ה-insets של סרגל הכותרת מגבולות האפליקציה בהגדרת הפעילות בממשק המחשב. כך היא מונעת הסתרה של רכיבים בממשק המשתמש של האפליקציה בחלק העליון או התחתון על ידי סרגל הכותרת, או חיתוך שלהם כשהאפליקציה לא מטפלת ב-insets של סרגל הכותרת. | |
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
ההגדרות הבאות מאפשרות לשנות כל כיוון:
- 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() או ל-Activity#getRequestedOrientation().
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
אל תגדירו את המאפיין
android:screenOrientationבמניפסט, או הגדירו את המאפיין לערך"user".מגדירים את המאפיין
android:resizeableActivityבמניפסט לערךtrue.במסכים קטנים, כדי לתמוך בשינוי גודל האפליקציה תוך השבתת מצב ריבוי חלונות באמצעות
android:resizeableActivity=false, צריך להגדיר את דגל המטא-נתוניםandroid.supports_size_changesלערךtrue. אל תגדירו אתminAspectRatioו-maxAspectRatio.
איך מבצעים אופטימיזציה של אפליקציות
האפליקציה צריכה לתמוך בכל כיווני המסך. אל תגדירו screenOrientation
במניפסט של האפליקציה. כדי לתמוך בשינוי גודל האפליקציה, במצב ריבוי חלונות ובכל יחסי הגובה-רוחב של התצוגה, צריך להגדיר את המאפיין android:resizeableActivity במניפסט של האפליקציה לערך true. תמיכה בגדלים שונים של מסכים
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
דגלי נכסים להתאמת שינוי ברירת המחדל
פקודות 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, המערכת משתמשת בשינוי רק אם לא צוין כיוון קבוע אחר בפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
איך מבצעים אופטימיזציה של אפליקציות
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
דגלי נכסים להתאמת שינוי ברירת המחדל
פקודות 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, המערכת משתמשת בשינוי רק אם לא צוין כיוון קבוע אחר בפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
איך מבצעים אופטימיזציה של אפליקציות
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
דגלי נכסים להתאמת שינוי ברירת המחדל
פקודות 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, המערכת משתמשת בשינוי רק אם לא צוין כיוון קבוע אחר בפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
איך מבצעים אופטימיזציה של אפליקציות
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
דגלי נכסים להתאמת שינוי ברירת המחדל
פקודות 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 כך שהם יחולו רק כשהחיבור למצלמה פעיל.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
איך מבצעים אופטימיזציה של אפליקציות
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
דגלי נכסים להתאמת שינוי ברירת המחדל
פקודות 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
ההגדרה הזו מגבילה את כיוון המסך לכיוון הטבעי לרוחב כשהתנאים הבאים מתקיימים:
- הפעילות מוצגת במסך מלא
- המאפיין Opt out component property
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDEלא מופעל - ההגדרה של יצרן המכשיר להתעלמות מבקשות לשינוי כיוון מופעלת במסך
- כיוון התצוגה הטבעי הוא לרוחב
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
לא רלוונטי. צריך לפתור את הבעיה בלוגיקה של האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
מגדירים את דגל המאפיין 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.
איך מבצעים אופטימיזציה של אפליקציות
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
מגדירים את דגל הנכס 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 לכיוון קבוע.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
לא רלוונטי. צריך לפתור את הבעיה בלוגיקה של האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
מגדירים את דגל הנכס 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
הגדרה שמחריגה חבילות מההתנהגות של התעלמות מבקשות לשינוי כיוון המסך, שיצרני המכשירים יכולים להפעיל באזור תצוגה מסוים או בכל המסך.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
לא רלוונטי. צריך לפתור את הבעיה בלוגיקה של האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
אי אפשר לבטל את ההסכמה להצגת יתר של מודעות. השבתת השינוי יכולה להיות מסוכנת אם האפליקציה לא תואמת למכשיר שבו מופעלת ההגדרה "התעלמות מבקשות לשינוי כיוון המסך" של יצרן המכשיר. כדי להשבית את ההחלפה, פנו אל קשרי מפתחים ב-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) של API מסוג Display על פעילות במצב תיבת דואר או במצב תאימות לגודל. ממשקי ה-API של Display ממשיכים לספק את גבולות אזור התצוגה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
כדי להצהיר על פעילויות שניתן לשנות את הגודל שלהן, מגדירים את מאפיין המניפסט android:resizeableActivity לערך true או את דגל המטא-נתונים android.supports_size_changes לערך true.
איך מבצעים אופטימיזציה של אפליקציות
באפליקציות שמוגדרות ככאלה שאפשר לשנות את הגודל שלהן באופן מלא, אסור להסתמך על גודל המסך כדי למקם את הרכיבים בממשק המשתמש. צריך להעביר את האפליקציה לממשקי API עדכניים שמספקים WindowMetrics. אם אתם משתמשים ב-Jetpack Compose, כדאי להשתמש ב-API של WindowSizeClass כדי ליצור את ממשק המשתמש על סמך שטח המסך שהאפליקציה תופסת בתצוגה הנוכחית. שימוש במחלקות של גודל חלון
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
אי אפשר לבטל את ההסכמה להצגת יתר של מודעות. עוברים מממשקי API שהוצאו משימוש.
דגלי נכסים להתאמת שינוי ברירת המחדל
אין דגלי נכסים לביטול הזה.
פקודות adb לבדיקת שינוי ברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable NEVER_SANDBOX_DISPLAY_APIS <package>
כדי להסיר את ההגדרה המקומית:
adb shell am compat disable NEVER_SANDBOX_DISPLAY_APIS <package>
הערה: הפקודות מחילות או מסירות את ההגדרה רק באופן זמני.
ALWAYS_SANDBOX_DISPLAY_APIS
המדיניות הזו מאלצת את החבילות להחיל תמיד את ארגז החול של ה-API Display, בלי קשר למצב החלונות. ממשקי ה-API של Display תמיד מספקים את גבולות האפליקציה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
כדי להגדיר פעילויות ככאלה שלא ניתן לשנות את הגודל שלהן, מגדירים את המאפיין android:resizeableActivity לערך false או את דגל המטא-נתונים android.supports_size_changes לערך false.
איך מבצעים אופטימיזציה של אפליקציות
באפליקציות שמוגדרות כניתנות לשינוי גודל באופן מלא, אסור להסתמך על גודל המסך כדי למקם את הרכיבים בממשק המשתמש. מעבירים את האפליקציה מממשקי API שהוצאו משימוש לממשקי API עדכניים שמספקים WindowMetrics. WindowMetricsCalculator.
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
אי אפשר לבטל את ההסכמה להצגת יתר של מודעות. עוברים מממשקי API שהוצאו משימוש.
דגלי נכסים להתאמת שינוי ברירת המחדל
אין דגלי נכסים לביטול הזה.
פקודות adb לבדיקת שינוי ברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
כדי להסיר את ההגדרה המקומית:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
הערה: הפקודות מחילות או מסירות את ההגדרה רק באופן זמני.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
ההגדרה הזו מאלצת חבילות להפעיל את ממשקי ה-API הבאים של View בארגז חול (sandbox) עם גבולות פעילות:
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
כדי לפתור את הבעיה בקוד האפליקציה, צריך להשתמש בממשקי API שמספקים את הגבולות של חלון האפליקציה וההיסטים ביחס לחלון האפליקציה, במקום את הגבולות של מסך המכשיר וההיסטים ביחס למסך המכשיר.
איך מבצעים אופטימיזציה של אפליקציות
האפליקציות צריכות להשתמש בממשקי API של View, ולהביא בחשבון את האפשרות שיופעלו באפליקציה מצב ריבוי חלונות ופסים שחורים. מידע נוסף זמין במאמר 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
ההגדרה הזו מאלצת חיתוך של הפלט מהמצלמה לכיוון ההפוך, כשהכיוון לאורך של המצלמה לא תואם לכיוון הטבעי של המכשיר. הרבה אפליקציות לא מטפלות במצב הזה, ואם לא משתמשים ב-aspect ratio, הן מציגות תמונות מתוחות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
מגדירים את דגל הנכס PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT לערך true.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
מגדירים את דגל הנכס PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT לערך false.
דגלי נכסים להתאמת שינוי ברירת המחדל
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
פקודות adb לבדיקת שינוי ברירת המחדל
כדי להחיל את ההגדרה שמפעילה את החיתוך של המצלמה הקדמית הפנימית:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
כדי להסיר את ההגדרה הזו, שמסירה את החיתוך של המצלמה הקדמית הפנימית:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
הערה: הפקודות מחילות או מסירות את ההגדרה רק באופן זמני.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
מונעת מאפליקציות לבטל את ההסכמה לשיתוף מסך של אפליקציה ספציפית (ראו הקרנת מדיה). ההגבלה הזו מיושמת כשאפליקציות משתמשות לרעה ב-API createConfigForDefaultDisplay() כדי לאלץ צילום מסך מלא ולסכן את פרטיות המשתמשים על ידי חשיפת התוכן של ההתראות, שמתועדות במסך מלא אבל לא בשיתוף מסך של אפליקציה ספציפית, וכל האפליקציות ללא קשר למצב החלונות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
לאפשר את התנהגות ברירת המחדל של הקרנת מדיה (מוטמעת ב-Android 14, רמת API 34, עם createScreenCaptureIntent()), שמאפשרת למשתמשים להחליט אם לשתף את המסך המלא או חלון של אפליקציה אחת, בלי קשר למצב החלונות. או להפעיל את createScreenCaptureIntent(MediaProjectionConfig) עם ארגומנט MediaProjectionConfig שמוחזר מהפעלה של createConfigForUserChoice().
איך מבצעים אופטימיזציה של אפליקציות
המשתמשים יכולים לבחור אם לשתף את כל המסך של המכשיר או חלון של אפליקציה במהלך הקרנת מדיה, שזו פעולת ברירת המחדל החל מ-Android 14.
כדי לתמוך במצב ריבוי חלונות, צריך לאפשר שינוי גודל של האפליקציה (resizeableActivity="true").
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
בגלל החשיבות של פרטיות המשתמשים, אי אפשר להשבית את ההגדרה הזו או לבטל את ההסכמה לה באפליקציה.
דגלי נכסים להתאמת שינוי ברירת המחדל
ללא.
פקודות adb לבדיקת שינוי ברירת המחדל
כדי להחיל את השינוי, שמבטל את ההשבתה של שיתוף המסך החלקי באפליקציה (כלומר, מפעיל את שיתוף המסך החלקי):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
כדי להסיר את ההגדרה הזו, שמאפשרת לאפליקציה לבטל את ההסכמה לשיתוף מסך חלקי:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
הערה: הפקודות מחילות או מסירות את השינוי באופן זמני בלבד.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
ההגדרה הזו מאפשרת לשלוח מיקוד מזויף לאפליקציות לא ממוקדות במצב מסך מפוצל. יש מנועי משחקים שממתינים לקבלת מיקוד לפני שהם מציגים את תוכן האפליקציה. לכן, מיקוד מדומה עוזר לאפליקציות להימנע ממצב של מסך שחור כשהן מופעלות מחדש ועדיין לא קיבלו מיקוד.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
מגדירים את דגל הנכס PROPERTY_COMPAT_ENABLE_FAKE_FOCUS לערך true.
איך מבצעים אופטימיזציה של אפליקציות
כדי למנוע את הבעיה הזו, חשוב לוודא שהאפליקציה מטפלת היטב בשינויים בכיוון המסך ובהגדרות. כדי שהאפליקציה תתמוך בכל גורמי הצורה של המכשירים ובכל מצבי החלונות של האפליקציה, צריך לפעול לפי הנחיות האיכות לאפליקציות רספונסיביות.
אם אתם משתמשים במנוע המשחק Unity, שדרגו לגרסה 2019.4.40 ואילך וייצאו מחדש את המשחק. משאירים את האפשרות Resizable Window מסומנת בהגדרות של Android Player.
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
מגדירים את דגל הנכס PROPERTY_COMPAT_ENABLE_FAKE_FOCUS לערך false.
דגלי נכסים להתאמת שינוי ברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ENABLE_FAKE_FOCUS"
android:value="true|false"/>
פקודות adb לבדיקת שינוי ברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
כדי להסיר את ההגדרה המקומית:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS <package>
הערה: הפקודות מחילות או מסירות את ההגדרה רק באופן זמני.
OVERRIDE_EXCLUDE_CAPTION_INSETS_FROM_APP_BOUNDS
ההגדרה הזו מחריגה את השוליים של סרגל הכותרת מגבולות האפליקציה בהגדרת הפעילות בממשק המחשב. כך, רכיבים בממשק המשתמש של האפליקציה בחלק העליון או התחתון לא מוסתרים על ידי סרגל הכותרת או נחתכים כשהאפליקציה לא מטפלת בשוליים של סרגל הכותרת.
בדרך כלל, ה-insets של סרגל הכותרת לא מוחרגים מגבולות האפליקציה בהגדרות, ו-Configuration.screenHeightDp וגבולות האפליקציה מדווחים על הגובה המלא של החלון, כולל האזור שמאחורי סרגל הכותרת של ממשק המחשב (סרגל הכותרת עם פקדי המזעור, ההגדלה והסגירה, שנשאר גלוי גם במצב אימרסיבי):
- אפליקציות מקצה לקצה או אפליקציות בתצוגה מקיפה שלא מטפלות בתוספות של סרגל הכותרת: אזור הפריסה של האפליקציה משתרע על פני כל החלון, כך שאם האפליקציה לא שולחת שאילתה ל-
WindowInsetsכדי לקזז את ממשק המשתמש שלה, פקדי החלק העליון יכולים להופיע ישירות מתחת לסרגל הכותרת. - אפליקציות שבהן המערכת מאלצת את השימוש בתוספות של סרגל הכותרת: כדי למנוע מהאפליקציה להציג תוכן מאחורי סרגל הכותרת, המערכת מזיזה את התצוגה הבסיסית של האפליקציה מתחת לסרגל הכותרת. אם האפליקציה קובעת את גודל הפריסה שלה באמצעות
Configuration.screenHeightDpשלא הותאם או גבולות האפליקציה, במקום באמצעות מידות אזור התצוגה, היא מעבדת פריסה בגובה מלא של החלון שמתחילה מתחת לסרגל הכותרת, דוחפת את רכיבי ממשק המשתמש התחתונים מעבר לקצה התחתון של החלון וגורמת לכך שיעדי המגע לא יהיו מיושרים.
כשההגדרה הזו מופעלת, המערכת מחסירה את גובה סרגל הכותרת מגבולות האפליקציה ומ-Configuration.screenHeightDp, כדי שאזור הפריסה של האפליקציה יתיישר עם המרחב שמתחת לסרגל הכותרת.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי ברירת המחדל
הפעלת תצוגה מקצה לקצה. תוכלו לעיין במקורות המידע הבאים:
- Compose: מידע על הוספת חלונות
- תצוגות: הצגת תוכן מקצה לקצה בתצוגות
- הגדרה: שינויים בהתנהגות: אפליקציות שמטרגטות ל-Android מגרסה 15 ואילך
איך מבצעים אופטימיזציה של אפליקציות
כדי למנוע את הבעיה הזו, אתם יכולים להפעיל באפליקציה תצוגה מקצה לקצה.
איך להשבית את ההגדרה או לבטל את ההסכמה לשימוש בה
מגדירים את דגל הנכס 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>
הערה: הפקודות מחילות או מסירות את ההגדרה רק באופן זמני.
מקורות מידע נוספים
-
בעלים של מכשיר וירטואלי הוא אפליקציה מהימנה או בעלת הרשאות שמנהלת מכשיר וירטואלי. בעלי מכשירים וירטואליים יוצרים מכשירים וירטואליים כדי לרנדר אפליקציות, ואז להקרין את האפליקציות למכשירים שמחוברים לרשת אחרת, כמו מחשבים אישיים, מכשירי מציאות מדומה או מערכות מולטימדיה לרכב. הבעלים של המכשיר הווירטואלי נמצא במכשיר מקומי, כמו טלפון. ↩