הצעות לפעולה מותאמות אישית

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

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

שינוי גודל

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

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

‫✓ Do

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

צריך להגדיר את resizeableActivity="true" אם האפליקציה מטרגטת רמות API נמוכות מ-24. אחרת, אפשר להתעלם מההגדרה הזו – היא מוגדרת כ-true כברירת מחדל ב-Android 7.0 (רמת API ‏24) ומעלה.

✗ לא מומלץ

אל תגדירו את הערך resizeableActivity="false" לאף רמת API. אל תחרגו את האפליקציה שלכם מתרחישי שימוש שכוללים מצב ריבוי חלונות.

כיוון

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

הגדרת המניפסט screenOrientation מגבילה את כיוון הפעילות.

‫✓ Do

מסירים את ההגדרה screenOrientation מקובץ המניפסט של האפליקציה.

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

✗ לא מומלץ

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

אפליקציות בפורמט letterbox יזכו לפחות יכולת גילוי ב-Google Play בטאבלטים, במכשירים מתקפלים ובמכשירי ChromeOS.

יחס גובה-רוחב

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

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

‫✓ Do

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

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

✗ לא מומלץ

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

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

גודל החלון

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

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

‫✓ Do

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

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

✗ לא מומלץ

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

ממשקי API שהוצאו משימוש

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

‫✓ Do

משתמשים ב-WindowManager#getCurrentWindowMetrics() וב-WindowMetrics#getBounds() כדי לקבל את הגודל של חלון האפליקציה. משתמשים ב-WindowMetrics#getDensity() כדי לקבל את צפיפות התצוגה.

✗ לא מומלץ

אסור להשתמש בממשקי ה-API הבאים של Display שהוצאו משימוש כדי לקבוע את גודל החלון:

  • getSize(): הוצא משימוש ב-Android 11 (רמת API‏ 30)
  • getMetrics(): הוצא משימוש ב-Android 11 (רמת API‏ 30)
  • getRealSize(): הוצא משימוש ב-Android 12 (רמת API‏ 31)
  • getRealMetrics(): הוצא משימוש ב-Android 12 (רמת API‏ 31)

כתיבה

הספרייה Jetpack פיתוח נייטיב מיועדת לפיתוח ממשקי משתמש מותאמים. אין XML, אין קובצי פריסה, אין מסנני משאבים. רק רכיבים קומפוזביליים חסרי מצב שמבוססים על Kotlin, כמו Column, ‏ Row ו-Box, שמתארים את ממשק המשתמש, ורכיבי modifier כמו offset, ‏ padding ו-size, שמוסיפים התנהגות לרכיבי ממשק המשתמש.

‫✓ Do

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

✗ לא מומלץ

אל תסתמכו על טכנולוגיה מיושנת. אל תתנו לאפליקציה שלכם להתיישן.

ספריית Compose Material 3 Adaptive

ספריית Compose Material 3 Adaptive מספקת רכיבים וממשקי API שמקלים על פיתוח אפליקציות אדפטיביות.

‫✓ Do

אפשר להשתמש בממשקי ה-API הבאים כדי להפוך את האפליקציה לדינמית:

  • NavigationSuiteScaffold: מעבר בין סרגל ניווט לבין מסילת ניווט בהתאם לסיווג הגודל של חלון האפליקציה.
  • ListDetailPaneScaffold: הטמעה של פריסת רשימה ופירוט קנונית. הפריסה מותאמת לגודל חלון האפליקציה.
  • SupportingPaneScaffold: מטמיע את הפריסה הקנונית של חלונית התמיכה.
✗ לא מומלץ

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

פריסות

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

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

‫✓ Do

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

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

✓ מומלץ: להציג רשימה של פעילויות ופרטים שלהן בפריסה של שתי חלוניות.
✗ לא מומלץ

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

✗ לא מומלץ: פריסה שנמתחת כדי למלא את החלון המתרחב.

התקני קלט

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

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

‫✓ Do

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

אפשר להשתמש בספריית Material 3 של Jetpack כדי לאפשר למשתמשים לכתוב באמצעות סטיילוס בכל רכיב TextField.

✗ לא מומלץ

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

סיכום

  • פיתוח אפליקציה באמצעות Compose וספריית Material 3 Adaptive
  • פריסות בסיסיות על סמך גדלים של חלונות
  • יצירת פריסות עם כמה חלוניות
  • שינוי הגודל של האפליקציה
  • אף פעם לא לנעול את כיוון הפעילות
  • ללא הגבלת יחס גובה-רוחב
  • תמיכה בקלט שאינו מגע
  • הימנעות משימוש בממשקי API שהוצאו משימוש

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

✗ אל תחכו. כדאי להתחיל עוד היום!