מערכת 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) ואילך, ההגדרה קובעת אם אפליקציות תומכות במצב ריבוי חלונות במסכים קטנים (סיווג גודל חלון קומפקטי). ב-Android מגרסה 12 ואילך, אפליקציות תומכות במצב 'כמה חלונות' במסכים גדולים (בקטגוריית גודל חלון בינונית או מורחבת) ללא קשר להגדרה הזו.maxAspectRatio
: קובע את יחס הגובה-רוחב המקסימלי שנתמך באפליקציה. רק אפליקציות שהערך שלresizeableActivity
בהן מוגדר כ-false
יכולות להגדיר אתmaxAspectRatio
.minAspectRatio
: מציין את יחס הגובה-רוחב המינימלי שנתמך על ידי האפליקציה. רק אפליקציות שבהןresizeableActivity
מוגדר לערךfalse
יכולות להגדיר אתminAspectRatio
.
אופטימיזציה
האפליקציה צריכה לתמוך בכל המכשירים ובכל הכיוונים והגדלים של המסך במצב חלונות מרובים. מסירים את כל ההגבלות לגבי הכיוון ויחס הגובה-רוחב הקבוע מפריסות האפליקציה ומקובץ המניפסט של האפליקציה.
פתרון עקיף לתאימות
אם אפליקציה עם יחס גובה-רוחב קבוע או יחס גובה-רוחב קבוע פועלת בחלון שבו האפליקציה לא תומכת ישירות בגודל החלון או בכיוון, האפליקציה ב-Android מציגה את תיבת הדואר הנכנס כדי לשמור על המשכיות שלה.
החל מ-Android 12 (רמת API 31) ועד 12L (רמת API 32), הפלטפורמה מחילה מגוון שיפורים על אפליקציות בפורמט letterbox. יצרני המכשירים מטמיעים את שיפורי ממשק המשתמש. לא צריך לבצע פיתוח נוסף כדי שהאפליקציה תוכל להפיק תועלת מהשיפורים.
ב-Android 12 (רמת API 31) יש את שיפורי האסתטיקה הבאים, שיצרני מכשירים יכולים להגדיר:
- פינות מעוגלות: הפינות של חלון האפליקציה נראות יותר מעודנות.
- שקיפות של סרגל המערכת: סרגלי הסטטוס וסרגל הניווט, ששכבת-על האפליקציה, שקופים למחצה, כך שהסמלים בסרגלים גלויים תמיד מעל הרקע של תיבת המכתבים.
- יחס גובה-רוחב שניתן להגדיר: אפשר לשנות את יחס הגובה-רוחב של האפליקציה כדי לשפר את המראה של האפליקציה.
12L (רמת API 32) מוסיפה את שיפורי הפונקציונליות הבאים:
מיקום שניתן להתאמה אישית: במסכים גדולים, יצרני המכשירים יכולים למקם את האפליקציה בצד ימין או שמאל של המסך, כדי להקל על האינטראקציה.
לחצן הפעלה מחדש בעיצוב חדש: יצרני מכשירים יכולים לשנות את העיצוב של לחצן ההפעלה מחדש למצב תאימות גודל כדי לשפר את הזיהוי של המשתמשים.
מערכת Android 13 (רמת API 33) מוסיפה תיבת דו-שיח שמסבירה למשתמשים איך למקם את האפליקציה עם פורמט letterbox במסך או כולל תיבת 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()
ב-method של הפעילות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 לרשת המדיה שהוצאו משימוש ונפוצים לשימוש לרעה:
מידע נוסף זמין במאמר תמיכה במצב ריבוי חלונות.
ממשקי 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
, יכולים לכלול סגנונות שמאפשרים לראות את הפעילויות.
פעילויות שקופות לא מכסות את כל שטח המסך הזמין, ולכן קשה לנהל אותן כי אזור המסך הזמין יכול להשתנות בהתאם לשינויים בהגדרות, כמו סיבוב המכשיר, קיפול המכשיר ופתיחתו, ומצב חלונות מרובים.
בעיה
פעילות שקופה צריכה להתאים לגבולות של הפעילות העממית הראשונה מתחת לפעילות השקופה במקבץ הפעילות של המשימה. עם זאת, פעילות אטומה שמפעילה תיבת דו-שיח של הרשאה יכולה להיות trampoline (פעילות שמפעילה פעילות אחרת ואז נעלמת). לכן, המערכת לא יכולה לקבוע את הגבולות של פעילות ה-trampoline שהפעילה את הפעילות של תיבת הדו-שיח השקופה של ההרשאה.
אופטימיזציה
פעילויות שקופות יורשות את המגבלות שלהן מהפעילות הכי אטומה שמתחתיהן במקבץ הפעילות של המשימה. הפעילות האטום צריכה להיות זמינה לכל מחזור החיים של הפעילות השקופה, מיצירת הפעילות ועד להשמדה. לכן, אל תפעילו בקשות הרשאה מפעילויות trampoline.
אם פעילות בטרמפולינות מפעילה בקשת הרשאה, ייתכן שהמשתמש לא יוכל לראות את תיבת הדו-שיח של ההרשאה כי פעילות הטרמפולינות תושמד לפני שהמשתמש הספיק להגיב לתיבת הדו-שיח, ויכול להיות שהמאפיינים והמיקום של הפעילות בתיבת הדו-שיח חושבו בצורה שגויה.
אפליקציות צריכות תמיד להפעיל בקשות להרשאות מפעילויות שנשארות גלויה עד שהמשתמש מחליט אם להעניק את ההרשאה.
פינות מעוגלות
פעילות יכולה להיות שקופה בגלל סגנון שמציין שקיפות של הרקע, או בגלל שתוכן הפעילות לא ממלא את שטח התצוגה הזמין. אם פעילות שקופה ממלאת את שטח המסך הזמין, המערכת מחילה באופן אוטומטי פינות מעוגלות על הפעילות אם היצרן של המכשיר הגדיר זאת. עם זאת, אם פעילות שקופה (למשל תיבת דו-שיח של הרשאה) לא ממלאת את כל המרחב הזמין, אתם יכולים להחליט אם להשתמש בפינות מעוגלות או לא.
תיבת הדו-שיח של ההרשאות לא ממלאת את כל שטח המסך הזמין, כי בדרך כלל בפריסה של תיבת הדו-שיח נעשה שימוש ב-LayoutParams.WRAP_CONTENT במקום ב-LayoutParams.MATCH_PARENT.
פתרון זמני לתאימות
חשוב לוודא שהפעילויות שמפעילות פעילויות של תיבת דו-שיח יהיו גלויות עד שהמשתמש יגיב לתיבת הדו-שיח.
המערכת מבטיחה שפעילות שקופה תירש את כל המגבלות מהפעילות האטום הראשונה שמופיעה מתחת לפעילות השקופה במקבץ הפעילויות, כולל אילוצים שקשורים לדברים הבאים:
- מצב תאימות לגודל
- כיוון
- יחס גובה-רוחב
משחקים ב-Unity
משחקי Unity פועלים ב-Android במסך מלא או במצב חלונות מרובים. עם זאת, במשחקים רבים של Unity, כשהאפליקציה מועברת למצב חלונות מרובים, היא מאבדת את המיקוד ומפסיקה לצייר את התוכן.
בעיה
ב-Unity 2019.4 נוספה האפשרות Resizable Window
לתמיכה במצב חלונות מרובים ב-Android. עם זאת, ההטמעה הראשונית לא הגיבה בצורה נכונה למחזור החיים של הפעילות במצב חלונות מרובים, וכתוצאה מכך UnityPlayer משהה את ההפעלה כשהאפליקציה מאבדת את המיקוד. השחקן יצר מסך שחור או את הפריים האחרון הקפוא במשחק. משחק הווידאו המשיך רק כשהמשתמש הקיש על המסך. הרבה אפליקציות שמשתמשות במנוע Unity מתמודדות עם הבעיה הזו ועובדות כחלון שחור במצב ריבוי חלונות.
אופטימיזציה
יש לשדרג את Unity לגרסה 2019.4.40 ואילך ולייצא מחדש את המשחק. חשוב לא לבטל את הסימון של האפשרות Resizable Window
בהגדרות הנגן של Android, אחרת המשחק יושהה כשהמיקוד לא יהיה עליו, גם אם הוא גלוי במלואו במצב חלונות מרובים.
פתרון זמני לתאימות
יצרני המכשירים יכולים להחיל את ההחרגה OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
לכל אפליקציה בנפרד כדי לספק לאפליקציה במצב חלונות מרובים אירוע זיוף של מיקוד. שינוי התוכן מאפשר לפעילות לצייר מחדש את התוכן ולא להסתיר אותו.
בדיקת האפליקציה לבעיות תאימות
כדי לבדוק את האפליקציה ולהבין איך היא פועלת על גורמי צורה שונים, כדאי להשתמש במקורות המידע הבאים:
- סטרימינג של מכשיר: כדי לבדוק את האפליקציה במכשירי ייצור (כולל מכשירי עזר) שמתארחים במרכזי הנתונים של Google, אפשר לעיין במאמר סטרימינג של מכשיר Android, שמופעל על ידי Firebase.
- אמולטורים ב-Android Studio Hdgehog: במאמר יצירה וניהול של מכשירים וירטואליים מוסבר איך ליצור אמולטורים למכשירי עזר.
- אמולטור של Android Studio שניתן לשנות את הגודל שלו: למידע על גישה למכשירים וירטואליים, ראו הפעלת אפליקציות באמולטור Android
בפורמט letterbox
מוודאים שכל פעילות יכולה להשתמש בכל שטח התצוגה שזמין לאפליקציה. קודם כל, צריך להצהיר על הקוד הבא בתיקיית הבדיקה:
Kotlin
fun Activity.isLetterboxed() : Boolean { if (isInMultiWindowMode) return false val wmc = WindowMetricsCalculator.getOrCreate() val currentBounds = wmc.computeCurrentWindowMetrics(this).bounds val maxBounds = wmc.computeMaximumWindowMetrics(this).bounds val isScreenPortrait = maxBounds.height() > maxBounds.width() return if (isScreenPortrait) { currentBounds.height() < maxBounds.height() } else { currentBounds.width() < maxBounds.width() } }
Java
public boolean isLetterboxed(Activity activity) { if (activity.isInMultiWindowMode()) { return false; } WindowMetricsCalculator wmc = WindowMetricsCalculator.getOrCreate(); Rect currentBounds = wmc.computeCurrentWindowMetrics(activity).getBounds() Rect maxBounds = wmc.computeMaximumWindowMetrics(activity).getBounds(); boolean isScreenPortrait = maxBounds.height() > maxBounds.width(); return (isScreenPortrait) ? currentBounds.height() < maxBounds.height() : currentBounds.width() < maxBounds.width(); }
לאחר מכן, מריצים בדיקה כדי לוודא את ההתנהגות ולוודא שהפעילות המטורגטת לא מופיעה בפורמט letterbox:
Kotlin
@get:Rule val activityRule = ActivityScenarioRule(MainActivity::class.java) @Test fun activity_launched_notLetterBoxed() { activityRule.scenario.onActivity { assertThat(it.isLetterboxed()).isFalse() } }
Java
@Rule public ActivityScenarioRule<MainActivity> rule = new ActivityScenarioRule<>(MainActivity.class); public void activity_launched_notLetterBoxed() { try (ActivityScenario<MainActivity> scenario = ActivityScenario.launch(MainActivity.class)) { scenario.onActivity(activity -> { assertThat(isLetterboxed(activity)).isFalse(); }); } }
מומלץ להריץ בדיקה כזו רק עד שהיא עוברת ומאשרת שהפעילויות של האפליקציה תופסות את כל שטח המסך שזמין לאפליקציה. כדאי לבדוק את האפליקציה בכל סוגי המכשירים כדי לוודא שההתנהגות שלה עקבית.
שינויים מברירת המחדל לכל אפליקציה
ב-Android יש אפשרויות לשינוי התנהגות מוגדרת של אפליקציות. לדוגמה, השינוי FORCE_RESIZE_APP
מורה למערכת לעקוף את מצב התאימות לגודל ולשנות את גודל האפליקציה כך שתתאים למאפייני התצוגה, גם אם resizeableActivity="false"
צוין בקובץ המניפסט של האפליקציה.
יצרני המכשירים מחילים שינויים על אפליקציות נבחרות – או על כל האפליקציות – במכשירים ספציפיים עם מסך גדול. ב-Android מגרסה 14 (רמת API 34) ואילך, המשתמשים יכולים להחיל שינויים מברירת המחדל על אפליקציות דרך הגדרות המכשיר.
שינויים מברירת המחדל של המשתמשים לכל אפליקציה
במכשירי Android מגרסה 14 ואילך, תפריט ההגדרות מאפשר למשתמשים לשנות את יחס הגובה-רוחב של האפליקציות. התפריט מוטמע במכשירים עם מסכים גדולים, כמו מכשירי עזר.
התפריט מכיל רשימה של כל האפליקציות שמותקנות במכשיר. המשתמשים בוחרים אפליקציה ומגדירים את יחס הגובה-רוחב שלה ל-3:4, ל-1:1, למסך מלא או לערך אחר שהוגדר על ידי יצרן המכשיר. המשתמשים יכולים גם לאפס את יחס הגובה-רוחב לברירת המחדל של האפליקציה, שצוינה במניפסט של האפליקציה.
כדי לבטל את ההסכמה לשינוי ברירת המחדל של התאימות, אפשר להגדיר את התגים הבאים של PackageManager.Property
:
PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE
כדי לבטל את ההסכמה לשינוי ברירת המחדל של תאימות יחס גובה-רוחב של משתמשים, מוסיפים את המאפיין למניפסט של האפליקציה ומגדירים את הערך כ-
false
:<application> <property android:name="android.window. PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_OVERRIDE" android:value="false" /> </application>
האפליקציה תוחרג מרשימת האפליקציות בהגדרות המכשיר. המשתמשים לא יוכלו לשנות את יחס הגובה-רוחב של האפליקציה.
להגדרת המאפיין ל-
true
אין השפעה.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE
כדי לבטל את ההסכמה לאפשרות המסך המלא של שינוי ברירת המחדל של תאימות יחס הגובה-רוחב של המשתמש, מוסיפים את המאפיין למניפסט של האפליקציה ומגדירים את הערך ל-
false
:<application> <property android:name="android.window.PROPERTY_COMPAT_ALLOW_USER_ASPECT_RATIO_FULLSCREEN_OVERRIDE" android:value="false" /> </application>
האפשרות 'מסך מלא' תוסר מרשימת אפשרויות יחס הגובה-רוחב בהגדרות המכשיר. המשתמשים לא יוכלו להחיל על האפליקציה את השינוי במסך מלא.
להגדרת המאפיין הזה כ-
true
אין השפעה.
אופטימיזציה של האפליקציה לכל המסכים: אל תגדירו באפליקציה הגבלות על יחס גובה-רוחב, אלא תוכלו להשתמש בסיווגי גודל חלונות כדי לתמוך בפריסות שונות בהתאם לנפח האחסון הזמין.
שינויים מברירת המחדל של יצרן המכשיר לכל אפליקציה
יצרני המכשירים מחילים שינויים על ברירת המחדל בכל אפליקציה בנפרד במכשירים נבחרים. מכשירי העזר עשויים להחיל חלק מביטולי השינוי על מגוון אפליקציות כברירת מחדל.
אפליקציות יכולות לבטל את ההסכמה לרוב השינויים האלה (ראו בטבלה שינויים ספציפיים לאפליקציה בהמשך).
אתם יכולים לבדוק את האפליקציה אם השינויים מופעלים או מושבתים באמצעות מסגרת התאימות (ראו כלים של מסגרת התאימות). כשהתכונה הזו מופעלת, השינויים חלים על כל האפליקציה.
אפשר גם להשתמש בגשר לניפוי באגים ב-Android (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_ISSUE_ORIENTATION | 236283604 | ההגדרה של בקשת הכיוון מתעלמת מההגדרה של בקשת הכיוון שלא תופסת בפורמט letterbox. | |
ממשקי 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_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
ההגדרה מאלצת חבילות שאף פעם לא מיושמת בארגז חול (sandboxing) של Display
API בפעילות עם פורמט letterbox או במצב תאימות לגודל. ממשקי ה-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
כך אילוץ תמיד להחיל הרצה בארגז חול (sandboxing) של API Display
בלי קשר למצב השימוש בחלונות. ממשקי ה-API של Display
תמיד מספקים את גבולות האפליקציה.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
כדי להצהיר על פעילויות שלא ניתן לשנות את הגודל שלהן, מגדירים את המאפיין android:resizeableActivity
לערך false
או את הדגל של המטא-נתונים android.supports_size_changes
לערך false
.
איך מבצעים אופטימיזציה של אפליקציות
באפליקציות שמוצהר בהן שניתן לשנות את גודלן באופן מלא, אסור בשום אופן להסתמך על גודל התצוגה כדי למקם רכיבי ממשק משתמש. מעבירים את האפליקציה מממשקי API שהוצאו משימוש לממשקי API עדכניים שמספקים את WindowMetrics
. ראו WindowMetricsCalculator
.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
אין אפשרות לבטל את ההסכמה. מעבר ממשקי API שהוצאו משימוש.
דגלי מאפיינים שצריך לשנות
אין דגלים של נכסים לשינוי הזה.
פקודות adb לבדיקת התעלמות
כדי להחיל את ההחרגה:
adb shell am compat enable ALWAYS_SANDBOX_DISPLAY_APIS <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable ALWAYS_SANDBOX_DISPLAY_APIS <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS
מאלץ חבילות להעביר את ממשקי ה-API הבאים של View
לארגז חול, בהתאם למגבלות הפעילות:
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
כדי לפתור את הבעיה בקוד האפליקציה, משתמשים בממשקי API שמספקים את הגבולות של חלון האפליקציה והיסטים ביחס לחלון האפליקציה, במקום לגבולות של תצוגת המכשיר והקיזוזים ביחס למסך המכשיר.
איך מבצעים אופטימיזציה של אפליקציות
צריך להשתמש בממשקי API של View
כדי להביא בחשבון את האפשרות להחיל על האפליקציה מצב letterbox ומצב מרובה חלונות. עיינו במאמר WindowMetricsCalculator
.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS
לערך false
.
דגלים של נכסים לשינוי של שינוי מברירת המחדל
<property android:name="android.window.PROPERTY_COMPAT_ALLOW_SANDBOXING_VIEW_BOUNDS_APIS"
android:value="false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_SANDBOX_VIEW_BOUNDS_APIS <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION
משביתה את האפשרות לאלץ סיבוב. שיפור חוויית המשתמש באפליקציות מסוימות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
לערך false
.
איך מבצעים אופטימיזציה של אפליקציות
אין להסתמך על המידע ששמור במטמון לגבי כיוון חיישן המצלמה או פרטי המכשיר. למידע נוסף על תאימות המצלמה, ראו היכרות עם העינית של המצלמה ותמיכה בפלטפורמות לשינוי גודל באפליקציית המצלמה.
איך להשבית או לבטל את ההסכמה לשינוי מברירת המחדל
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION
ל-true
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_FORCE_ROTATION"
android:value="true|false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את ההחרגה, שמבטלת את הצורך בביצוע סבב בכפייה:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
כדי להסיר את הביטול, מה שמאפשר לבצע סיבוב כוח:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH
משבית את רענון הפעילות לאחר רוטציה מאולצת. משפר את חוויית המשתמש כשהרענון גורם לאובדן מצב באפליקציות.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
ל-false
.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה?
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH
ל-true
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ALLOW_REFRESH"
android:value="true|false"/>
פקודות adb לבדיקה של שינוי מברירת המחדל
כדי להחיל את השינוי, שמסיר את רענון הפעילות:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
כדי להסיר את השינוי מברירת המחדל, שמאפשר רענון של הפעילות:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_DISABLE_REFRESH <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
האפשרות הזו גורמת לחבילות שהוחלו עליהן לבצע רענון פעילות באמצעות מחזור onResume()
→ onPause()
→ onResume()
במקום onResume()
→
onStop()
→ onResume()
אחרי סיבוב בכפייה של תאימות המצלמה.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה
מגדירים את דגל המאפיין PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE
ל-false
.
דגלי מאפיינים שצריך לשנות
<property android:name="android.window.PROPERTY_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את ההחרגה:
adb shell am compat enable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
כדי להסיר את השינוי מברירת המחדל:
adb shell am compat disable OVERRIDE_CAMERA_COMPAT_ENABLE_REFRESH_VIA_PAUSE <package>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT
היא מאלצת חיתוך של פלט המצלמה לכיוון ההפוך אם הכיוון של המצלמה לאורך לא תואם לכיוון הטבעי של המכשיר. אפליקציות רבות לא מתמודדות עם המצב הזה, אחרת מוצגות תמונות מתוחות.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
ראו OVERRIDE_CAMERA_COMPAT_DISABLE_FORCE_ROTATION.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה?
מגדירים את דגל הנכס PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT
לערך false
.
דגלים של נכסים לשינוי של שינוי מברירת המחדל
<property android:name="android.camera.PROPERTY_COMPAT_OVERRIDE_LANDSCAPE_TO_PORTRAIT"
android:value="true|false"/>
פקודות adb לבדיקת התעלמות
כדי להחיל את שינוי הערך שמחיל חיתוך של המצלמה הקדמית הפנימית:
adb shell am compat enable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
כדי לבטל את השינוי, שמסיר את החיתוך של המצלמה הקדמית:
adb shell am compat disable OVERRIDE_CAMERA_LANDSCAPE_TO_PORTRAIT <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION
מונעת מאפליקציות לבטל את ההסכמה לשיתוף המסך שלהן (ראו הקרנת מדיה). מיושם כשאפליקציות משתמשות לרעה ב-API של createConfigForDefaultDisplay()
כדי לאלץ
צילום מסך מלא ולסכן את פרטיות המשתמשים על ידי חשיפת תוכן ההתראות, שמתועדות במסך מלא אבל לא בשיתוף המסך של האפליקציה, וכל האפליקציות, ללא קשר למצב של סינון התוכן.
איך אפליקציות יכולות להשיג את אותה תוצאה של שינוי מברירת המחדל
לאפשר את התנהגות ברירת המחדל של הקרנת המדיה (הוטמעה ב-Android 14, ברמת API 34, באמצעות createScreenCaptureIntent()
), שמאפשרת למשתמשים להחליט אם לשתף את המסך המלא או חלון יחיד של אפליקציה, ללא קשר למצב החלון. אפשר גם להפעיל את הפונקציה createScreenCaptureIntent(MediaProjectionConfig)
עם ארגומנט MediaProjectionConfig
שמוחזר מקריאה ל-createConfigForUserChoice()
.
איך מבצעים אופטימיזציה של אפליקציות
המשתמשים יכולים לבחור אם לשתף את כל תצוגת המכשיר או חלון של אפליקציה במהלך הקרנת מדיה. החל מ-Android 14, זו התנהגות ברירת המחדל.
כדאי לאפשר שינוי של גודל האפליקציה (resizeableActivity="true"
) כדי לתמוך במצב 'חלונות מרובים'.
איך משביתים את האפשרות לשינוי או מבטלים את ההסכמה להשתמש בה?
מכיוון שמדובר בנושא חשוב מאוד של פרטיות המשתמשים, לא ניתן להשבית את ההחרגה הזו באפליקציה או לבטל את ההסכמה לה.
דגלי מאפיינים שצריך לשנות
ללא.
פקודות adb לבדיקת התעלמות
כדי להחיל את השינוי מברירת המחדל, שיבטל את ההסכמה של האפליקציה לשיתוף מסך חלקי (כלומר, מאפשר שיתוף מסך חלקי):
adb shell am compat enable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
כדי לבטל את השינוי, שמאפשר לאפליקציה לבטל את ההסכמה לשיתוף מסך חלקי:
adb shell am compat disable OVERRIDE_DISABLE_MEDIA_PROJECTION_SINGLE_APP_OPTION <package>
הערה: הפקודות מחילות או מסירות את השינוי רק באופן זמני.
OVERRIDE_ENABLE_COMPAT_FAKE_FOCUS
הפעלת מיקוד מזויף באפליקציות לא ממוקדות במצב מסך מפוצל. חלק ממנועי המשחקים ממתינים למיקוד לפני שהם מציירים את תוכן האפליקציה. לכן, מיקוד מזויף עוזר לאפליקציות לא להשחיר את האפליקציות, כשממשיכים אותן ואין בהן מיקוד.
איך אפליקציות יכולות להשיג את אותה תוצאה כמו שינוי מברירת המחדל
מגדירים את דגל הנכס PROPERTY_COMPAT_ENABLE_FAKE_FOCUS
לערך true
.
איך מבצעים אופטימיזציה של אפליקציות
אפשר להימנע מהבעיה הזו אם האפליקציה מטפלת היטב בכיוונים שונים ובהגדרות אישיות. כדי שהאפליקציה תהיה מוכנה למסך גדול, פועלים לפי ההנחיות בנושא איכות אפליקציות למסך גדול.
אם אתם משתמשים במנוע המשחקים של Unity, עליכם לשדרג לגרסה 2019.4.40 ואילך ולייצא מחדש את המשחק. משאירים את האפשרות Resizable Window
מסומנת בהגדרות של Android 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>
הערה: הפקודות מחילות או מסירות את ההחרגה באופן זמני בלבד.
מקורות מידע נוספים
- הנחיות בנושא איכות האפליקציות למסכים גדולים
- הנחיות לאיכות האפליקציות המרכזיות