מסכים מחוברים מרחיבים את חוויית החלונות במחשב לטלפונים רגילים, ומאפשרים למשתמשים לגשת למסכים גדולים מהמכשירים הניידים שלהם. היכולת הזו פותחת אפשרויות חדשות לאינטראקציה עם האפליקציה ולשיפור הפרודוקטיביות של המשתמשים.
כל התכונות הייחודיות של ממשק מחשב חלות על מסכים מחוברים. כשמחברים טלפון למסך, המצב של הטלפון לא משתנה, ומתחיל סשן ריק של מחשב בשולחן העבודה במסך המחובר. המכשיר והמסך פועלים כשתי מערכות נפרדות, עם אפליקציות שספציפיות לכל מסך.
אם מחברים מכשיר עם ממשק מחשב, כמו טאבלט, לצג חיצוני, סשן המחשב יתפרס על שני המסכים. שני המסכים יפעלו כמערכת רציפה אחת. ההגדרה הזו מאפשרת להזיז חלונות, תוכן וסמן באופן חופשי בין שני המסכים.
כדי לתמוך בצורה יעילה בצגים מחוברים, צריך לשים לב לכמה היבטים של העיצוב וההטמעה של האפליקציה. השיטות המומלצות הבאות מבטיחות חוויית משתמש חלקה ופרודוקטיבית.
טיפול בשינויים דינמיים בתצוגה
אפליקציות רבות בנויות מתוך הנחה שאובייקט Display והמאפיינים שלו לא ישתנו במהלך מחזור החיים של האפליקציה. עם זאת, כשמשתמש מחבר או מנתק מסך חיצוני, או אפילו מעביר חלון של אפליקציה בין מסכים, אובייקט Display הבסיסי שמשויך להקשר או לחלון של האפליקציה יכול להשתנות. המאפיינים של המסך, כמו גודל, רזולוציה, קצב רענון, תמיכה ב-HDR וצפיפות, יכולים להיות שונים. אם אתם מקודדים ערכים באופן קשיח על סמך המסך של הטלפון, לדוגמה, סביר להניח שהפריסות שלכם ייפגמו בתצוגה חיצונית.
גם דחיסות הפיקסלים במסכים חיצוניים יכולות להיות שונות מאוד. צריך לוודא שהאפליקציה מגיבה בצורה נכונה לשינויים בצפיפות. התהליך כולל שימוש בפיקסלים שלא תלויים בדחיסות (dp) עבור פריסות, אספקת משאבים ספציפיים לדחיסות ווידוא שהממשק משתנה בהתאם.
אם פעילות כלשהי פועלת במסך חיצוני כשהוא מתנתק, המערכת מעבירה את הפעילות למסך הראשי. ההעברה מפעילה שינויים בהגדרות – כמו שינויים בגודל המסך ובצפיפות הפיקסלים – שיכולים לגרום ליצירה מחדש של הפעילות. האפליקציה צריכה לטפל בשינוי ההגדרה על ידי שמירה ושחזור של מצב ממשק המשתמש כדי למנוע אובדן נתונים או חוויית משתמש מבלבלת.
שימוש בהקשר הנכון
שימוש בהקשר הנכון הוא חיוני בסביבות עם כמה מסכים. כשניגשים למשאבים, הקשר של הפעילות (שמוצג) שונה מההקשר של האפליקציה (שלא מוצג).
הקשר של הפעילות מכיל מידע על התצוגה, והוא תמיד מותאם לאזור התצוגה שבו הפעילות מופיעה. כך תוכלו לקבל את המידע הנכון על צפיפות התצוגה או על מדדי החלון של האפליקציה. תמיד צריך להשתמש בהקשר של הפעילות (או בהקשר אחר שמבוסס על ממשק המשתמש) כדי לקבל מידע על החלון או התצוגה הנוכחיים. הדבר משפיע גם על חלק מממשקי ה-API של המערכת שמשתמשים במידע מההקשר.
ב-Jetpack פיתוח נייטיב, אפשר לגשת למידע ספציפי לתצוגה באמצעות אובייקטים של CompositionLocal כמו LocalConfiguration.current ו-LocalDensity.current. כשפעילות או חלון עוברים בין מסכים, הגדרת המכשיר משתנה, ומתבצעת יצירה מחדש עם מדדים חדשים של המסך. CompositionLocal אובייקטים מאפשרים לממשק המשתמש להסתגל בצורה חלקה.
קבלת מידע על המסך
אפשר להשתמש במחלקה Display כדי לקבל מידע כמו גודל התצוגה, הצפיפות או הדגלים. משתמשים בשירות המערכת DisplayManager כדי לקבל את המסכים הזמינים. כדי לזהות מסכים חיצוניים, מסננים את Display.DEFAULT_DISPLAY, שהוא בדרך כלל המסך המובנה של הטלפון או הטאבלט:
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val displays = displayManager.getDisplays()
// The default display is 0. External displays have other IDs.
val externalDisplays = displays.filter { it.displayId != Display.DEFAULT_DISPLAY }
ניהול והגדרה של הפעלת פעילות
באמצעות מסכים מחוברים, אפליקציות יכולות לציין באיזה מסך אפליקציה צריכה לפעול כשהיא מופעלת או כשהיא יוצרת פעילות אחרת. ההתנהגות הזו תלויה במצב ההפעלה של הפעילות שמוגדר בקובץ המניפסט, ובאפשרויות ובדגלי הכוונות שמוגדרים על ידי הישות שמפעילה את הפעילות.
כשפעילות עוברת לתצוגה משנית, יכול להיות שיהיה עדכון של ההקשר באפליקציה, שינוי גודל החלון ושינויים בהגדרות ובמשאבים. אם הפעילות מטפלת בשינוי ההגדרה, היא מקבלת על כך הודעה ב-onConfigurationChanged(). אחרת, הפעילות מופעלת מחדש.
אם מצב ההפעלה שנבחר לפעילות מאפשר כמה מופעים, הפעלה במסך משני יכולה ליצור מופע חדש של הפעילות. שתי הפעילויות ממשיכות לפעול בו-זמנית, וזה יכול להיות שימושי בתרחישים מסוימים של ריבוי משימות.
אפשר להפעיל פעילות במסך מסוים באמצעות ActivityOptions. שימו לב שנדרשת מערכת Android מגרסה 8 (רמת API 26) ומעלה כדי להשתמש ב-launchDisplayId.
// Get DisplayManager and find the first external display.
val displayManager = getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val externalDisplayId = displayManager.displays
.firstOrNull { it.displayId != Display.DEFAULT_DISPLAY }
?.displayId
// If an external display is found, launch the activity on it.
if (externalDisplayId != null) {
val intent = Intent(this, MySecondaryActivity::class.java)
val options = ActivityOptions.makeBasic()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
options.launchDisplayId = externalDisplayId
}
startActivity(intent, options.toBundle())
} else {
// Optionally, handle the case where no external display is connected.
}
לא להשתמש ברשימות היתרים למכשירים
לפעמים אפליקציות מגבילות את ממשק המשתמש והתכונות שלהן במסכים גדולים למכשירים נבחרים באמצעות רשימת היתרים או על ידי בדיקה של BUILD.MODEL וגודל התצוגה המובנה. הגישה הזו לא יעילה לגבי מסכים מחוברים, כי אפשר לחבר כמעט כל מכשיר למסך גדול, ודגם המכשיר לא משתנה כשמחברים מסך חיצוני.
במקום להשתמש ברשימות היתרים או לבדוק את BUILD.MODEL ואת גודל התצוגה המובנה, כדאי לבדוק את מדדי החלון או את היכולות של המכשיר בזמן ריצה כדי לקבל החלטות לגבי ממשק המשתמש. כדי ליצור פריסות רספונסיביות שמותאמות לגדלים ולצפיפויות שונות של מסכים, אפשר להשתמש בממשקי API של Jetpack WindowManager או בסיווגים של גודל החלון.
תמיכה בציוד היקפי חיצוני
כשמשתמשים מתחברים למסך חיצוני, הם לרוב יוצרים סביבה שדומה יותר לזו של מחשב. לעתים קרובות זה כולל שימוש במקלדות חיצוניות, בעכברים, במשטחי מגע, במצלמות אינטרנט, במיקרופונים וברמקולים. אתם צריכים לוודא שהאפליקציה פועלת בצורה חלקה עם הציוד ההיקפי הזה. התאימות כוללת טיפול במקשי קיצור, ניהול של אינטראקציות עם סמן העכבר, תמיכה נכונה במצלמות או במיקרופונים חיצוניים, וכיבוד של ניתוב פלט האודיו. מידע נוסף זמין במאמר בנושא תאימות קלט במסכים גדולים.
שיפור הפרודוקטיביות של המשתמשים
מסכים מחוברים מספקים הזדמנות משמעותית לשיפור הפרודוקטיביות של המשתמשים. עכשיו יש לכם את הכלים ליצירת אפליקציות לנייד שיכולות לספק חוויה שדומה לזו של אפליקציות למחשב. כדאי להטמיע את התכונות הבאות כדי לשפר את הפרודוקטיביות של המשתמשים:
- לאפשר למשתמשים לפתוח כמה מופעים של אותה אפליקציה. זה שימושי מאוד למשימות כמו השוואת מסמכים, ניהול שיחות שונות או צפייה בכמה קבצים בו-זמנית.
- אפשר למשתמשים לשתף מידע מגוון בתוך האפליקציה ומחוצה לה באמצעות גרירה ושחרור.
- כדי לעזור למשתמשים לשמור על תהליך העבודה שלהם כשמבצעים שינויים בהגדרות, כדאי להטמיע מערכת ניהול מצב חזקה.
אם תפעלו לפי ההנחיות האלה ותשתמשו בדוגמאות הקוד שסיפקנו, תוכלו ליצור אפליקציות שמותאמות בצורה חלקה למסכים מחוברים, וכך להציע למשתמשים חוויה עשירה ופרודוקטיבית יותר.