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

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

רשימה קצרה של הגדרות תצורה וממשקי 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 זוכות לפחות קלות גילוי ב-Google Play בטאבלטים, במכשירים מתקפלים ובמכשירי ChromeOS.

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

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

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

‫✓ Do

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

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

✗ לא מומלץ

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

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

גודל החלון

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

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

‫✓ Do

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

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

✗ לא מומלץ

אל תתעלמו מהתועלת של ההגדרות של מחלקות גודל החלון ומממשקי ה-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 Compose מיועדת לפיתוח ממשקי משתמש מותאמים. אין 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 Compose כדי לשפר את הפרודוקטיביות של המפתחים.

פריסות

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

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

‫✓ Do

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

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

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

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

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

התקני קלט

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

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

‫✓ Do

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

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

✗ לא מומלץ

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

סיכום

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

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

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