מערכת Android מפעילה מצב תאימות לאפליקציות שמצהירות על הגבלות של כיוון או שינוי גודל. מצב התאימות מבטיח התנהגות סבירה של האפליקציה במכשירים עם מסך גדול ובטלפונים מתקפלים, אבל עם נוחות שימוש לא אופטימלית.
עקיפות לכל אפליקציה מאפשרות ליצרני המכשירים לשנות את התנהגות האפליקציה כדי לשפר את חוויית המשתמש או למנוע תקלות באפליקציות במכשירים ספציפיים.
מכשירים להתייחסות
יכול להיות שתצטרכו לבצע שינויים ספציפיים לאפליקציות במכשירים הבאים בגלל הגדרות חריגות או הגדרות שלא נתמכות היטב באפליקציות:
- טאבלטים: בחלק מהטאבלטים, כמו Pixel Tablet, הכיוון הטבעי הוא לרוחב. המכשיר נמצא בכיוון הטבעי שלו כשהערך של
Display#getRotation()
חוזר לערךSurface.ROTATION_0
. אם האפליקציות יקבלו את ההנחה שהכיוון שלROTATION_0
הוא לאורך, יכול להיות שהפריסות של האפליקציות והתצוגה המקדימה של המצלמה לא יתאימו למסך של המכשיר. - מכשירים מתקפלים לרוחב: חלק מהמכשירים המתקפלים, כמו Pixel Fold, פועלים במצב לאורך כשהם מקופלים, אבל במצב לרוחב כשהם פרוסים. אם האפליקציות מניחות שהכיוון בזמן הפתיחה הוא לאורך, סביר להניח שיהיו מחזורים מהבהבים או בעיות בפריסה.
- טלפונים מתקפלים עם צג מתקפל: טלפונים מתקפלים עם צג מתקפל בדרך כלל בפורמט לאורך. אבל כשהטלפונים מקופלים, בדרך כלל יש להם מסך קטן בכיוון לרוחב. האפליקציות צריכות לזהות את הכיוונים השונים של המסכים ולהתאים את עצמן אליהם.
בעיות תאימות נפוצות
בדרך כלל, בעיות תאימות באפליקציות נובעות מהגבלות על כיוון האפליקציה, מגבלות על שינוי הגודל ועל יחס הגובה-רוחב, משימוש שגוי ב-API ומטיפול שגוי בכיוון של תצוגה מקדימה במצלמה.
Letterboxing חפשו את המטמון
כשמשתמשים בפורמט Letterbox, האפליקציה ממוקמת במרכז המסך, או בצד אחד או השני במסכים גדולים, כדי לאפשר גישה נוחה. רכיבי 'מט' (עמודות בצבע אחיד או טפט מטושטש) ממלאים את אזור התצוגה שלא בשימוש בצדדים או בחלק העליון והתחתון של האפליקציה.
פורמט letterbox נפוץ במכשירים עם מסך גדול, כי בדרך כלל המימדים ויחס הגובה-רוחב של המסך של המכשיר שונים מאלה של טלפונים רגילים, שעבורם תוכננו רוב האפליקציות.
בעיה
האפליקציה לא תומכת בכל הגדרות המסך כי היא מוגדרת לכיוון קבוע, ליחס גובה-רוחב קבוע או שלא ניתן לשנות את הגודל שלה.
הגדרות התצורה ששולטות בכיוון ובגודל של האפליקציה כוללות את האפשרויות הבאות:
screenOrientation
: מציין כיוון קבוע לאפליקציה. אפליקציות יכולות גם להגדיר את הכיוון בזמן הריצה באמצעותActivity#setRequestedOrientation()
.resizeableActivity
: מציין אם המערכת יכולה לשנות את הגודל של האפליקציות כך שיתאימו לחלונות בגדלים שונים. ב-Android 11 (רמת API 30) ובגרסאות קודמות, ההגדרה קובעת אם האפליקציות תומכות במצב 'כמה חלונות'. ב-Android מגרסה 12 ואילך (רמת API 31), ההגדרה קובעת אם האפליקציות תומכות במצב 'חלונות מרובים' במסכים קטנים (window size class קומפקטי). ב-Android מגרסה 12 ואילך, אפליקציות תומכות במצב 'כמה חלונות' במסכים גדולים (בקטגוריית גודל חלון בינונית או מורחבת) ללא קשר להגדרה הזו.maxAspectRatio
: קובע את יחס הגובה-רוחב המקסימלי שנתמך באפליקציה. רק אפליקציות שהערך שלresizeableActivity
בהן מוגדר כ-false
יכולות להגדיר אתmaxAspectRatio
.minAspectRatio
: קובע את יחס הגובה-רוחב המינימלי שנתמך באפליקציה. רק אפליקציות שהערך שלresizeableActivity
בהן מוגדר כ-false
יכולות להגדיר אתminAspectRatio
.
אופטימיזציה
האפליקציה צריכה לתמוך בכל המכשירים ובכל הכיוונים והגדלים של המסך במצב חלונות מרובים. מסירים את כל ההגבלות על כיוון ותצוגה ביחס גובה-רוחב קבוע מהפריסות של האפליקציה ומקובץ המניפסט של האפליקציה.
פתרון עקיף לתאימות
אם אפליקציה עם כיוון קבוע או יחס גובה-רוחב קבוע פועלת בחלון שהאפליקציה לא תומכת ישירות בגודל או בכיוון של החלון, מערכת Android תשנה את יחס הגובה-רוחב של האפליקציה לפורמט letterbox כדי לשמור על רציפות.
החל מ-Android 12 (רמת API 31) ועד 12L (רמת API 32), הפלטפורמה מחילה מגוון שיפורים על אפליקציות בפורמט letterbox. יצרני המכשירים מטמיעים את השיפורים בממשק המשתמש. כדי ליהנות מהשיפורים, לא תצטרכו לבצע פיתוח נוסף באפליקציה.
ב-Android 12 (רמת API 31) נוספו השיפורים האסתטיים הבאים, שאותם יצרני המכשירים יכולים להגדיר:
- פינות מעוגלות: הפינות של חלון האפליקציה נראות מעודנות יותר.
- שקיפות של שורת הסטטוס: שורת הסטטוס וסרגל הניווט, שמופיעים מעל לאפליקציה, הם בעלי שקיפות חלקית, כך שסמלים בשורות האלה תמיד גלויים מעל לרקע בפורמט Letterbox.
- יחס גובה-רוחב שניתן להגדרה: אפשר לשנות את יחס הגובה-רוחב של האפליקציה כדי לשפר את המראה שלה.
ב-12L (רמת API 32) נוספו השיפורים הפונקציונליים הבאים:
מיקום שניתן להתאמה אישית: במסכים גדולים, יצרני המכשירים יכולים למקם את האפליקציה בצד ימין או שמאל של המסך, כדי להקל על האינטראקציה.
עיצוב חדש של לחצן ההפעלה מחדש: יצרני המכשירים יכולים לתת ללחצן ההפעלה מחדש במצב תאימות לגודל מראה חדש כדי שהמשתמשים יוכלו לזהות אותו בקלות.
ב-Android 13 (רמת API 33) נוספת תיבת דו-שיח עם הסבר למשתמשים לגבי מיקום האפליקציה בפורמט letterbox במסך או הכללת הפורמט הזה במצב מסך מפוצל:
מצב תאימות לגודל
מצב תאימות לגודל הוא פורמט letterbox שכולל לחצן הפעלה מחדש. הלחצן מאפשר למשתמשים להפעיל מחדש את האפליקציה ולצייר מחדש את התצוגה. מערכת Android מפעילה את מצב התאימות לגודל באפליקציות שנקבע שהן לא ניתנות לשינוי גודל. כשפעילות מועברת למאגר תצוגה שלא תואם למאפייני התצוגה שלה, המערכת עשויה לשנות את קנה המידה של האפליקציה כדי למלא את מסך המכשיר לפחות במאפיין אחד.
שינויים בהגדרות המכשיר שיכולים להפעיל את מצב התאימות לגודל כוללים את האפשרויות הבאות:
- סיבוב המכשיר
- מכשיר מתקפל שפועל במצב מקופל או פתוח
- מעבר בין מצבי תצוגה של מסך מלא למסך מפוצל
בעיה
מצב תאימות לגודל רלוונטי בדרך כלל לפעילויות עם הגבלות על הכיוון או יחס הגובה-רוחב, שמוגדרות (או שהמערכת קובעת) כבלתי ניתנות לשינוי גודל.
האפליקציה נחשבת ככזו שאפשר לשנות את הגודל שלה, והיא לא תועבר למצב תאימות לגודל אם היא עומדת באחד מהקריטריונים הבאים:
- אפשר לשנות את הגודל שלו באמצעות
resizeableActivity="true"
- תמיכה במצב תמונה בתוך תמונה (PIP)
- מוטמעים
- יצרן המכשיר מחיל שינוי מברירת המחדל
FORCE_RESIZE_APP
לכל אפליקציה (המערכת מתעלמת מהמאפיינים שהוגדרו על ידי האפליקציה)
אם האפליקציה לא עומדת באף אחד מהתנאים, היא נחשבת לאפליקציה שלא ניתן לשנות את הגודל שלה, ויכול להיות שהיא תועבר למצב תאימות לגודל.
אופטימיזציה
האפליקציה צריכה לתמוך בכל גודלי המסכים. כדי לאפשר שינוי של גודל האפליקציה, מגדירים את המאפיין android:resizeableActivity
של האלמנט <activity>
או <application>
לערך true
במניפסט של האפליקציה. כדאי לעצב פריסות רספונסיביות או פריסות עם התאמה אישית לאפליקציה. למידע נוסף, ראו תמיכה בגדלים שונים של מסכים ותמיכה במצב 'כמה חלונות'.
פתרון עקיף לתאימות
מערכת Android מעבירה אפליקציה למצב תאימות לגודל כשהיא קובעת שאפשר לשפר את התצוגה של האפליקציה בפורמט 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)
ותמשיך את הלולאה האינסופית.
אופטימיזציה
אסור לאפליקציות לבצע את הפעולות הבאות:
- מגדירים כיוון ברירת מחדל באמצעות
Activity#setRequestedOrientation()
בשיטהonCreate()
של הפעילות, כי בקשת הכיוון עשויה להופיע באופן בלתי צפוי בגלל שינויים לא מטופלים בהגדרות - נניח שהכיוון הטבעי של המכשיר (
ROTATION_0
) הוא לאורך - הגדרת הכיוון על סמך אותות שלא קשורים לגודל החלון הנוכחי, כמו
Display#getRotation()
, נוכחות שלFoldingFeature
או ממשקי API שהוצאו משימוש.
פתרון עקיף לתאימות
Android מתעלם מהקריאות ל-Activity#setRequestedOrientation()
במקרים הבאים:
הפעילות כבר הושקה מחדש משיחה קודמת לשיטה, או שהטיפול בכפייה של סיבוב התמונה בהתאם לתאימות המצלמה הופעל (ראו תצוגה מקדימה של המצלמה בהמשך).
יצרני מכשירים יכולים להחיל את ההתנהגות הזו על אפליקציה באמצעות
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
.הפעילות שלחה יותר משתי בקשות לכיוון במהלך שנייה אחת, מה שמצביע על כך שהתרחשה לולאה. מבין שתי הבקשות בלולאה, מערכת Android משתמשת בבקשה שמגדילה את אזור התצוגה של האפליקציה.
יצרני מכשירים יכולים להחיל את ההתנהגות הזו על אפליקציה באמצעות
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
.
תצוגה מקדימה של מצלמה
התצוגה המקדימה של המצלמה (או העינית) באפליקציות המצלמה עשויה להיות לא ישרה או מעוותת בטאבלטים, במחשבים ניידים ובמסכים מתקפלים.
בעיה
במסמך ההגדרה של תאימות ל-Android מצוין שחיישן התמונה של המצלמה "חייב להיות בכיוון שבו הממד הארוך של המצלמה תואם לממד הארוך של המסך".
אפליקציות מניחות בדרך כלל שהכיוון של המכשיר ושל חיישן המצלמה הוא לאורך – הנחה סבירה לגבי טלפונים ניידים רגילים. אבל הכיוון הטבעי של טאבלטים ומחשבים ניידים וחיישני המצלמה שלהם יכול להיות לרוחב. בנוסף, למכשירים בפורמטים חדשים כמו מכשירי טלפונים מתקפלים יכולות להיות כמה כיוונים טבעיים ומספר חיישני מצלמה בכיוונים שונים.
אם מתחילים פעילות עם כיוון מצלמה שלא צפוי באפליקציה, או עוברים בין מצלמות שונות או בין מסכי המכשיר (במכשירים מתקפלים), יכול להיות שהתצוגה המקדימה של המצלמה תהיה מעוותת או לא יישור.
אופטימיזציה
אפליקציות המצלמה צריכות לזהות ולנהל בצורה נכונה את כיוון המכשיר ואת כיוון חיישן המצלמה כדי להציג תצוגה מקדימה של המצלמה עם יישור ותצוגה בגודל הנכון. האפליקציות צריכות לחשב את סיבוב המכשיר, סיבוב החיישן ויחס הגובה-רוחב של המסך או החלון, ואז להחיל את התוצאות על התצוגה המקדימה במצלמה. להנחיות מפורטות, אפשר לעיין במאמרים תצוגה מקדימה של המצלמה והצגת מצלמת Google כמצלמת ראי.
פתרון עקיף לתאימות
המכשיר נמצא בכיוון טבעי כשהערך המוחזר של 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 של Display שהוצאו משימוש ונפוץ שימוש שגוי בהם:
מידע נוסף זמין במאמר תמיכה במצב 'חלונות מרובים'.
שימוש לרעה בממשקי API של תצוגות:
אופטימיזציה
לעולם אל תסתמכו על גודל המסך הפיזי כדי למקם רכיבים בממשק המשתמש. מעבירים את האפליקציה לממשקי API שמבוססים על WindowMetrics
, כולל ממשקי ה-API הבאים של WindowManager
:
פלטפורמה:
Jetpack:
פתרון עקיף לתאימות
יש שני שינויים שמותאמים לממשקי ה-API Display
שהוצאו משימוש ולממשקי ה-API View
שנעשה בהם שימוש לרעה, כדי להחזיר את גבולות האפליקציה: ALWAYS_SANDBOX_DISPLAY_APIS
לממשקי ה-API מסוג Display
, ו-OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
לממשקי ה-API מסוג View
. ALWAYS_SANDBOX_DISPLAY_APIS
מוחל כברירת מחדל גם על אפליקציות שעומדות בדרישות של מצב תאימות לגודל.
פעילויות שקופות
פעילויות שקופות הן תוצאה של סגנונות רקע שקופים, למשל:
<style name="Transparent" parent="AppTheme">
<item name="android:windowIsTranslucent">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
</style>
נושאים שקשורים לתיבת דו-שיח, כמו Theme.MaterialComponents.Dialog
, יכולים לכלול סגנונות שמאפשרים לראות את הפעילויות.
פעילויות שקופות לא מכסות את כל שטח המסך הזמין, ולכן קשה לנהל אותן כי שטח המסך הזמין יכול להשתנות בהתאם לשינויים בהגדרות, כמו סיבוב המכשיר, קיפול המכשיר ופתיחת המכשיר, ומצב חלונות מרובים.
בעיה
פעילות שקופה צריכה להתאים לגבולות של הפעילות האטומה הראשונה מתחת לפעילות השקופה ב-activity stack של המשימה. עם זאת, פעילות אטומה שמפעילה תיבת דו-שיח של הרשאה יכולה להיות trampoline (פעילות שמפעילה פעילות אחרת ואז נעלמת). לכן, המערכת לא יכולה לקבוע את הגבולות של פעילות ה-trampoline שהפעילה את הפעילות של תיבת הדו-שיח השקופה של ההרשאה.
אופטימיזציה
פעילויות שקופות יורשות את האילוצים שלהן מהפעילות האטומה העליונה שמתחתיהן בסטאק הפעילויות של המשימה. הפעילות האטומה חייבת להיות זמינה לכל אורך מחזור החיים של הפעילות השקופה, מרגע היצירה שלה ועד להשמדה. לכן, אל תפעילו בקשות הרשאה מפעילויות trampoline.
אם פעילות trampoline מפעילה בקשת הרשאה, יכול להיות שהמשתמש לא יוכל לראות את תיבת הדו-שיח של ההרשאה כי פעילות ה-trampoline תושמד לפני שהמשתמש יקבל הזדמנות להגיב לתיבת הדו-שיח, ויכול להיות שהמימדים והמיקום של פעילות תיבת הדו-שיח מחושבים באופן שגוי.
אפליקציות צריכות תמיד להפעיל בקשות להרשאות מפעילויות שנשארות גלויה עד שהמשתמש מחליט אם להעניק את ההרשאה.
פינות מעוגלות
פעילות יכולה להיות שקופה בגלל סגנון שמציין שקיפות של הרקע, או בגלל שתוכן הפעילות לא ממלא את שטח התצוגה הזמין. אם פעילות שקופה ממלאת את שטח המסך הזמין, המערכת מחילה באופן אוטומטי פינות מעוגלות על הפעילות אם היצרן של המכשיר הגדיר זאת. עם זאת, אם פעילות שקופה (למשל תיבת דו-שיח של הרשאה) לא ממלאת את כל המרחב הזמין, אתם יכולים להחליט אם להשתמש בפינות מעוגלות או לא.
תיבת הדו-שיח של ההרשאות לא ממלאת את כל שטח המסך הזמין, כי בדרך כלל בפריסה של תיבת הדו-שיח נעשה שימוש ב-LayoutParams.WRAP_CONTENT במקום ב-LayoutParams.MATCH_PARENT.
פתרון עקיף לתאימות
חשוב לוודא שהפעילויות שמפעילות פעילויות של תיבת דו-שיח יהיו גלויות עד שהמשתמש יגיב לתיבת הדו-שיח.
המערכת מוודאת שפעילות שקופה יורשת את כל האילוצים מהפעילות האטומה הראשונה שמתחת לפעילות השקופה ב-activity stack, כולל אילוצים שקשורים ל:
- מצב תאימות לגודל
- כיוון
- יחס גובה-רוחב
משחקים ב-Unity
משחקי Unity פועלים ב-Android במסך מלא או במצב חלונות מרובים. עם זאת, במשחקים רבים של Unity, כשהאפליקציה מועברת למצב חלונות מרובים, היא מאבדת את המיקוד ומפסיקה לצייר את התוכן.
בעיה
ב-Unity 2019.4 נוספה האפשרות Resizable Window
לתמיכה במצב חלונות מרובים ב-Android. עם זאת, ההטמעה הראשונית לא הגיבה בצורה נכונה למחזור החיים של הפעילות במצב חלונות מרובים, וכתוצאה מכך UnityPlayer משהה את ההפעלה כשהאפליקציה מאבדת את המיקוד. הנגן עיבד מסך שחור או את הפריים האחרון והקפוא של המשחק. משחק הווידאו המשיך רק כשהמשתמש הקיש על המסך. אפליקציות רבות שמשתמשות במנוע Unity נתקלות בבעיה הזו, והן מוצגות כחלון שחור במצב ריבוי חלונות.
אופטימיזציה
משדרגים את Unity לגרסה 2019.4.40 ואילך ומייצאים מחדש את המשחק. חשוב לא לבטל את הסימון של האפשרות Resizable Window
בהגדרות הנגן של Android, אחרת המשחק יושהה כשהמיקוד לא יהיה עליו, גם אם הוא גלוי במלואו במצב חלונות מרובים.
פתרון עקיף לתאימות
יצרני מכשירים יכולים להחיל את ההחרגה OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
לכל אפליקציה בנפרד כדי לספק לאפליקציה אירוע התמקדות מזויף במצב חלונות מרובים. שינוי התוכן מאפשר לפעילות לצייר מחדש את התוכן ולא להסתיר אותו.
בדיקת האפליקציה לבעיות תאימות
כדי לבדוק את האפליקציה ולהבין איך היא מתנהגת בפלטפורמות שונות, תוכלו להיעזר במקורות המידע הבאים:
- סטרימינג של מכשיר: כדי לבדוק את האפליקציה במכשירי ייצור (כולל מכשירי עזר) שמתארחים במרכזי הנתונים של Google, אפשר לעיין במאמר סטרימינג של מכשיר Android, שמופעל על ידי Firebase .
- מכונות וירטואליות ב-Android Studio Hedgehog: מידע על יצירת מכונות וירטואליות למכשירי עזר זמין במאמר יצירה וניהול של מכונות וירטואליות
- מכונה וירטואלית שניתן לשנות את הגודל שלה ב-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
לא משפיעה.
אופטימיזציה של האפליקציה לכל המסכים: אל תגדירו הגבלות על יחסי גובה-רוחב באפליקציה. השתמשו בסיווגים של גודל חלון כדי לתמוך בפריסות שונות על סמך נפח שטח המסך הזמין.
שינויים מברירת המחדל של יצרן המכשיר לכל אפליקציה
יצרני מכשירים מחילים שינויים על ברירת המחדל בכל אפליקציה בנפרד במכשירים נבחרים. מכשירי העזר עשויים להחיל חלק מהעקיפות על מגוון אפליקציות כברירת מחדל.
אפליקציות יכולות לבטל את ההסכמה לרוב השינויים האלה (ראו בטבלה שינויים ספציפיים לאפליקציה בהמשך).
אפשר לבדוק את האפליקציה עם החלפות שהופעלו או הושבתו באמצעות מסגרת התאימות (ראו כלים של מסגרת התאימות). כשהתכונה הזו מופעלת, השינויים חלים על כל האפליקציה.
אפשר גם להשתמש ב-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 | שינוי מברירת המחדל של Gatekeeper שצריך להפעיל כדי להחיל שינויים אחרים ביחס גובה-רוחב. |
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_REQUESTED_ORIENTATION | 254631730 | התעלמות מבקשות של האפליקציה לגבי כיוון המסך כדי למנוע לולאות אינסופיות של רוטציה. | |
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED | 273509367 | התכונה מתעלמת מבקשות חוזרות לכיוון המסך בזמן שהפעילות מופעלת מחדש. אם מערכת Android מזהה שאפליקציה מבקשת לפחות שתי כיוונים חדשים בתוך שנייה אחת, המערכת מתייחסת לכך כאל לולאה אינסופית של רוטציה ומחילה את שינוי הערך המוגדר כברירת מחדל. | |
OVERRIDE_RESPECT_REQUESTED_ORIENTATION | 236283604 | ההגדרה הזו מונעת שימוש בפורמט letterbox על ידי השבתת ההגדרה של יצרן המכשיר להתעלמות מבקשות לגבי כיוון המסך. | |
ממשקי API בארגז חול | 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_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
ברמת הפעילות או האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
אל תגדירו הגבלות של יחס גובה-רוחב באפליקציה. חשוב לוודא שהאפליקציה תומכת בגדלים שונים של מסכים. שימוש בקטגוריות של גודל חלון כדי לתמוך בפריסות שונות בהתאם למרחב שהאפליקציה תופסת במסך. כתיבה של WindowSizeClass
API והצגה של 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
מפעילה את הכיוון reverseLandscape לכל הפעילויות בחבילה. אלא אם האפשרות OVERRIDE_ANY_ORIENTATION מופעלת, המערכת משתמשת בשינוי רק אם לא צוין כיוון קבוע אחר בפעילות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
דגלים של נכסים לביטול השפעה
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
כדי להסיר את ההחרגה:
adb shell am compat disable OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA
הגבלות על החלפות הערך של OVERRIDE_UNDEFINED_ORIENTATION_TO_PORTRAIT, OVERRIDE_UNDEFINED_ORIENTATION_TO_NOSENSOR ו-OVERRIDE_LANDSCAPE_ORIENTATION_TO_REVERSE_LANDSCAPE כך שיחולו רק כשחיבור המצלמה פעיל.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
דגלים של נכסים לביטול השפעה
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
כדי להסיר את ההחרגה:
adb shell am compat disable OVERRIDE_ORIENTATION_ONLY_FOR_CAMERA <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION
ההגדרה הזו מגבילה את כיוון המסך לכיוון טבעי לרוחב כשמתקיימים התנאים הבאים:
- הפעילות מוצגת במסך מלא
- מאפיין הרכיב של ביטול ההסכמה
PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
לא מופעל - ההגדרה של יצרן המכשיר 'התעלמות מבקשות שינוי כיוון' מופעלת במסך
- הכיוון הטבעי של המסך הוא לרוחב
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
לא ישים. צריך לפתור את הבעיה בלוגיקה של האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מגדירים את דגל הנכס PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE
לערך false
.
דגלים של נכסים לשינוי של שינוי מברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_DISPLAY_ORIENTATION_OVERRIDE"
android:value="true|false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
כדי להסיר את ההחרגה:
adb shell am compat disable OVERRIDE_USE_DISPLAY_LANDSCAPE_NATURAL_ORIENTATION <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION
הפעלת מדיניות תאימות שמדלגת על עדכון כיוון האפליקציה בתגובה לקריאה של האפליקציה ל-Activity#setRequestedOrientation()
כשהאפליקציה מופעלת מחדש או כשיש לה טיפול פעיל בתאימות למצלמה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה לשימוש בה
מגדירים את דגל הנכס PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION
לערך false
.
דגלים של נכסים לשינוי של שינוי מברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_IGNORE_REQUESTED_ORIENTATION"
android:value="true|false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
כדי להסיר את ההחרגה:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_REQUESTED_ORIENTATION <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
הפעלת מדיניות התאימות שמתעלם מהכיוון המבוקש של האפליקציה בתגובה לקריאה של האפליקציה ל-Activity#setRequestedOrientation()
יותר מפעמיים בשנייה, אם הפעילות לא מוצגת בפורמט letterbox לכיוון קבוע.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
לא ישים. צריך לפתור את הבעיה בלוגיקה של האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מגדירים את הדגל של הנכס PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED
לערך false
.
דגלים של נכסים לביטול התאמה
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_IGNORING_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED"
android:value="false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
כדי להסיר את ההחרגה:
adb shell am compat disable OVERRIDE_ENABLE_COMPAT_IGNORE_ORIENTATION_REQUEST_WHEN_LOOP_DETECTED <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_RESPECT_REQUESTED_ORIENTATION
החבילות לא נכללות בהתנהגות של התעלמות מבקשות שינוי כיוון, שיכולה להיות מופעלת על ידי יצרני המכשירים לאזור תצוגה או לכל המסך.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
לא ישים. צריך לפתור את הבעיה בלוגיקה של האפליקציה.
איך מבצעים אופטימיזציה של אפליקציות
מידע נוסף זמין במאמר OVERRIDE_ANY_ORIENTATION
.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
אי אפשר לבטל את ההסכמה להצגת יתר של מודעות. השבתת ההחרגה עלולה להיות מסוכנת אם האפליקציה לא תואמת למכשיר שבו ההגדרה של היצרן היא להתעלם מהבקשה לשינוי כיוון המסך. כדי להשבית את ההחרגה, צריך לפנות אל Android Developer Relations.
דגלים של נכסים לביטול השפעה
אין דגלים של נכסים לשינוי הזה.
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
כדי להסיר את ההחרגה:
adb shell am compat disable OVERRIDE_RESPECT_REQUESTED_ORIENTATION <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
NEVER_SANDBOX_DISPLAY_APIS
מאלץ את החבילות לעולם לא לעבור בדיקת חול של Display
API לפעילות במצב letterbox או במצב תאימות לגודל. ממשקי ה-API של Display
ימשיכו לספק את גבולות אזור התצוגה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
כדי להצהיר על פעילויות שניתנות לשינוי גודל, מגדירים את המאפיין android:resizeableActivity
במניפסט לערך true
או את הדגל android.supports_size_changes
במטא-נתונים לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
אפליקציות שמצהירות שהן ניתנות לשינוי גודל באופן מלא, לעולם לא צריכות להסתמך על גודל המסך כדי למקם את רכיבי ממשק המשתמש. מעבירים את האפליקציה לממשקי API עדכניים שמספקים את WindowMetrics
. אם אתם משתמשים ב-Jetpack Compose, תוכלו להשתמש ב-API של WindowSizeClass
כדי לצייר את ממשק המשתמש על סמך שטח המסך שהאפליקציה תופסת בתצוגה הנוכחית. שימוש בקטגוריות של גודל חלון
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
אי אפשר לבטל את ההסכמה להצגת יתר של מודעות. מעבר מ-APIs שהוצאו משימוש.
דגלים של נכסים לביטול השפעה
אין דגלים של נכסים לשינוי הזה.
פקודות 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
.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
אי אפשר לבטל את ההסכמה להצגת יתר של מודעות. מעבר מ-APIs שהוצאו משימוש.
דגלים של נכסים לביטול השפעה
אין דגלים של נכסים לשינוי הזה.
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
כדי להסיר את ההחרגה:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
מאלץ חבילות להעביר את ממשקי ה-API הבאים של View
לארגז חול, בהתאם למגבלות הפעילות:
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
פותרים את הבעיה בקוד האפליקציה באמצעות ממשקי API שמספקים את גבולות חלון האפליקציה וההיסטים ביחס לחלון האפליקציה, במקום את גבולות המסך של המכשיר וההיסטים ביחס למסך המכשיר.
איך מבצעים אופטימיזציה של אפליקציות
אפליקציות צריכות להשתמש בממשקי API של View
, תוך התחשבות באפשרות של החלת letterboxing וריבוי חלונות על האפליקציה. אפשר לעיין במאמר WindowMetricsCalculator
.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מגדירים את דגל הנכס PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
לערך false
.
דגלים של נכסים לשינוי של שינוי מברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
כדי להסיר את ההחרגה:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
משבית את האפשרות לאלץ סיבוב. שיפור חוויית המשתמש באפליקציות מסוימות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
לערך false
.
איך מבצעים אופטימיזציה של אפליקציות
אין להסתמך על המידע ששמור במטמון לגבי כיוון חיישן המצלמה או פרטי המכשיר. להנחיות לגבי תאימות למצלמות, אפשר לעיין במאמרים השקה: עינית במצלמה ותמיכה במשטחים שניתן לשנות את הגודל שלהם באפליקציית המצלמה.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מגדירים את דגל הנכס PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
לערך true
.
דגלים של נכסים לביטול השפעה
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה, שמבטלת את סיבוב הכוח:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
כדי להסיר את ההחרגה שמאפשרת ביצוע רוטציה בכפייה:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
השבתת הרענון של הפעילות אחרי סיבוב בכוח. שיפור חוויית המשתמש במקרים שבהם הרענון גורם לאובדן מצב באפליקציות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
לערך false
.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מגדירים את דגל הנכס PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
לערך true
.
דגלים של נכסים שאפשר לשנות כדי לבטל את ההגדרה שמוגדרת כברירת מחדל
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה, שמבטלת את הרענון של הפעילות:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
כדי להסיר את ההחרגה, שמאפשרת לרענן את הפעילות:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
האפשרות הזו גורמת לחבילות שהוחלו עליהן לבצע רענון פעילות באמצעות מחזור onResume()
→ onPause()
→ onResume()
במקום onResume()
→
onStop()
→ onResume()
אחרי סיבוב בכפייה של תאימות המצלמה.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מגדירים את דגל הנכס PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
לערך false
.
דגלים של נכסים לביטול השפעה
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
כדי להסיר את ההחרגה:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
כאשר כיוון המצלמה בפורמט לאורך לא תואם לכיוון הטבעי של המכשיר, הפונקציה מאלצת את הפלט של המצלמה לחיתוך לכיוון ההפוך. אפליקציות רבות לא מטפלות במצב כזה ומציגות תמונות מורחבות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מגדירים את דגל הנכס PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
לערך false
.
דגלים של נכסים לביטול השפעה
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את שינוי הערך שמחיל חיתוך של המצלמה הקדמית הפנימית:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
כדי להסיר את השינוי, שמבטל את החיתוך של המצלמה הקדמית הפנימית:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
מונעת מאפליקציות לבטל את ההסכמה לשיתוף המסך שלהן (ראו הקרנת מדיה). ההגדרה הזו מיושמת כשאפליקציות משתמשות לרעה ב-API של createConfigForDefaultDisplay()
כדי לאלץ צילום מסך מלא ולסכן את פרטיות המשתמשים על ידי חשיפת התוכן של ההתראות. התמונות של ההתראות נשמרות כשהן צולמו במסך מלא, אבל לא כשהן צולמו באמצעות שיתוף מסך האפליקציה. ההגדרה הזו חלה על כל האפליקציות, ללא קשר למצב החלון.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
לאפשר את התנהגות ברירת המחדל של הקרנת המדיה (הוטמעה ב-Android 14, ברמת API 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>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
מקורות מידע נוספים
- הנחיות בנושא איכות אפליקציות במסך גדול
- הנחיות בנושא איכות האפליקציה