אנחנו שמחים לבשר על אבן דרך משמעותית בקירוב בין מחשוב בנייד למחשוב בשולחן העבודה ב-Android: תמיכה במסכים מחוברים זמינה לכולם עם הגרסה Android 16 QPR3!
כפי שהוצג ב- Google I/O 2025, מסכים מחוברים מאפשרים למשתמשים לחבר את מכשירי Android שלהם למסך חיצוני ולקבל גישה מיידית לסביבת חלונות של מחשב שולחני. אפשר להשתמש באפליקציות בחלונות חופשיים או בחלונות מוגדלים, והמשתמשים יכולים לבצע ריבוי משימות כמו במערכת הפעלה למחשב.
Google ו-Samsung שיתפו פעולה כדי לספק חוויית שימוש חלקה ועוצמתית בממשק מחשב במכשירים שפועלת בהם מערכת Android 16 בסביבת Android, כשהם מחוברים למסך חיצוני.
התכונה זמינה עכשיו לכלל המשתמשים במכשירים נתמכים*, שמאפשרת להם לחבר את טלפוני Pixel ו-Samsung הנתמכים שלהם לצגים חיצוניים. כך הם יכולים ליצור הזדמנויות חדשות לבניית חוויות שימוש באפליקציות שהן יותר מעניינות ויותר פרודוקטיביות, ומתאימות למגוון גורמי צורה.
איך זה עובד
כשמחברים טלפון או מכשיר מתקפל עם Android שנתמכים לכך לצג חיצוני, מתחיל סשן חדש של מחשב בצג המחובר.
החוויה במסך המחובר דומה לחוויה במחשב, כולל סרגל משימות שבו מוצגות אפליקציות פעילות ומאפשר למשתמשים להצמיד אפליקציות לגישה מהירה. המשתמשים יכולים להפעיל כמה אפליקציות זו לצד זו בו-זמנית בחלונות שניתן לשנות את הגודל שלהם באופן חופשי במסך המחובר.
הטלפון מחובר למסך חיצוני עם סשן של מחשב בשולחן העבודה שמוצג במסך, בזמן שהטלפון שומר על המצב שלו.
כשמחברים מכשיר שתומך בממשק מחשב (כמו טאבלט Samsung Galaxy Tab S11) למסך חיצוני, סשן המחשב מורחב לשני המסכים, ומתקבל סביבת עבודה רחבה עוד יותר. שני המסכים פועלים כמערכת אחת רציפה, ומאפשרים לחלונות של אפליקציות, לתוכן ולסמן לעבור בחופשיות בין המסכים.
טאבלט שמחובר למסך חיצוני, והסשן של שולחן העבודה נפרס על שני המסכים.
למה זה חשוב?
בגרסה Android 16 QPR3, סיימנו את ההתנהגויות של חלונות, את האינטראקציות עם סרגל המשימות ואת התאימות של הקלט (עכבר ומקלדת) שמגדירים את חוויית השימוש בצג מחובר. הוספנו גם אמצעים לשיפור התאימות כדי לשנות את גודל החלונות ולמנוע הפעלה מחדש של האפליקציות כשעוברים בין מסכים.
אם האפליקציה שלכם מבוססת על עקרונות של עיצוב מותאם, היא תיראה ותפעל כמו אפליקציה למחשב באופן אוטומטי, והמשתמשים ירגישו בה בנוח. אם האפליקציה נעולה למצב אנכי או מניחה ממשק מגע בלבד, עכשיו זה הזמן לעדכן אותה.
חשוב במיוחד לשים לב לשיטות המומלצות העיקריות האלה כדי ליצור חוויית שימוש אופטימלית באפליקציות במסכים מחוברים:
-
אל תניחו שקיים אובייקט
Displayקבוע: האובייקטDisplayשמשויך להקשר של האפליקציה יכול להשתנות כשחלון של אפליקציה מועבר לתצוגה חיצונית או אם הגדרות התצוגה משתנות. האפליקציה צריכה לטפל בצורה חלקה באירועים של שינוי הגדרות ולשאול על מדדי הצגת המודעות באופן דינמי במקום לשמור אותם במטמון. - התאמה לשינויים בתצורת הצפיפות:: לצגים חיצוניים יכולות להיות רמות צפיפות שונות מאוד של פיקסלים בהשוואה למסך המכשיר הראשי. כדי לשמור על בהירות ממשק המשתמש ועל נוחות השימוש, חשוב לוודא שהפריסות והמשאבים מותאמים לשינויים האלה בצורה נכונה. כדאי להשתמש בפיקסלים בלתי תלויים בדחיסות (dp) עבור פריסות, לספק משאבים ספציפיים לדחיסות ולוודא שממשק המשתמש מותאם בצורה הולמת.
- תמיכה נכונה בציוד היקפי חיצוני: כשמשתמשים מתחברים למסך חיצוני, הם לרוב יוצרים סביבה שדומה יותר לסביבת מחשב. לעתים קרובות זה כולל שימוש במקלדות חיצוניות, בעכברים, בלוחות מגע, במצלמות אינטרנט, במיקרופונים וברמקולים. שיפור התמיכה באינטראקציות עם מקלדת ועם עכבר.
בנייה לעתיד של המחשבים עם כלים מודרניים
אנחנו מספקים כמה כלים שיעזרו לכם ליצור את חוויית השימוש במחשב. בואו נסכם את העדכונים האחרונים בספריות הליבה האדפטיביות שלנו.
סיווגים חדשים של גודל החלון: גדול וגדול במיוחד
העדכון הכי גדול ב-Jetpack WindowManager 1.5.0 הוא הוספה של שני סוגים חדשים של חלונות לפי רוחב: Large ו-Extra-large.
סוגי החלונות הם קבוצה רשמית של נקודות עצירה של אזור התצוגה, שנועדה לעזור לכם לעצב ולפתח פריסות מותאמות. בגרסה 1.5.0, אנחנו מרחיבים את ההנחיות האלה למסכים שגדולים יותר מגודל הטאבלטים הרגיל.
אלה נקודות עצירה חדשות לרוחב:
- גדול: לרוחב של 1,200dp עד 1,600dp
- גדול במיוחד: לרוחבים של ≥1,600dp
הסיווגים השונים של גודל החלון על סמך רוחב המסך.
במסכים גדולים מאוד, הגדלה של פריסת התצוגה המורחבת של טאבלט לא תמיד מספקת את חוויית המשתמש הטובה ביותר. לדוגמה, תוכנת אימייל יכולה להציג בנוחות שני חלונות (תיבת דואר והודעה) בגודל חלון מורחב. אבל במסך מחשב בגודל גדול במיוחד, תוכנת האימייל יכולה להציג בצורה מסודרת שלוש או אפילו ארבע חלוניות, למשל תיבת דואר, רשימת הודעות, את התוכן המלא של ההודעה וחלונית של יומן או משימות, והכול בו-זמנית.
כדי לכלול את הסיווגים החדשים של גודל החלון בפרויקט, פשוט קוראים לפונקציה מהקבוצה WindowSizeClass.BREAKPOINTS_V2 במקום WindowSizeClass.BREAKPOINTS_V1:
val currentWindowMetrics =
WindowMetricsCalculator.getOrCreate()
.computeCurrentWindowMetrics(LocalContext.current)
val sizeClass = WindowSizeClass.BREAKPOINTS_V2
.computeWindowSizeClass(currentWindowMetrics)
אחרי שמוודאים שיש לאפליקציה לפחות את המקום הזה, אפשר להחיל את הפריסה הנכונה:
if(sizeClass.isWidthAtLeastBreakpoint(
WindowSizeClass.WIDTH_DP_LARGE_LOWER_BOUND)){
...
// Window is at least 1200 dp wide.
}
פיתוח פריסות מותאמות באמצעות Jetpack Navigation 3
Navigation 3 הוא התוסף האחרון לאוסף Jetpack. Navigation 3, שהגיע לאחרונה לגרסה היציבה הראשונה שלו, הוא ספריית ניווט עוצמתית שנועדה לעבוד עם Compose.
Navigation 3 הוא גם כלי מצוין ליצירת פריסות דינמיות, כי הוא מאפשר להציג כמה יעדים בו-זמנית ולעבור בצורה חלקה בין הפריסות האלה.
המערכת הזו לניהול זרימת ממשק המשתמש של האפליקציה מבוססת על Scenes. סצנה היא פריסה שמציגה יעד אחד או יותר בו-זמנית. SceneStrategy קובע אם אפשר ליצור סצנה. שרשור של מופעים של SceneStrategy מאפשר ליצור ולהציג סצנות שונות לגדלים שונים של מסכים ולהגדרות שונות של מכשירים.
כדי להשתמש בפריסות קנוניות מוכנות, כמו רשימה עם פרטים וחלון תומך, אפשר להשתמש בסצנות מהספרייה של Compose Material 3 Adaptive (זמינה בגרסה 1.3 ומעלה).
אפשר גם ליצור בקלות סצנות מותאמות אישית משלכם על ידי שינוי של מתכוני הסצנות או על ידי יצירה מאפס. לדוגמה, נניח שיש סצנה שבה מוצגים שלושה חלונות זה לצד זה:
class ThreePaneScene<T : Any>(
override val key: Any,
override val previousEntries: List<NavEntry<T>>,
val firstEntry: NavEntry<T>,
val secondEntry: NavEntry<T>,
val thirdEntry: NavEntry<T>
) : Scene<T> {
override val entries: List<NavEntry<T>> = listOf(firstEntry, secondEntry, thirdEntry)
override val content: @Composable (() -> Unit) = {
Row(modifier = Modifier.fillMaxSize()) {
Column(modifier = Modifier.weight(1f)) {
firstEntry.Content()
}
Column(modifier = Modifier.weight(1f)) {
secondEntry.Content()
}
Column(modifier = Modifier.weight(1f)) {
thirdEntry.Content()
}
}
}
בתרחיש הזה, אפשר להגדיר SceneStrategy כדי להציג שלושה חלונות אם רוחב החלון מספיק, והערכים מסטאק החזרה הצהירו שהם תומכים בהצגה בסצנה עם שלושה חלונות.
class ThreePaneSceneStrategy<T : Any>(val windowSizeClass: WindowSizeClass) : SceneStrategy<T> {
override fun SceneStrategyScope<T>.calculateScene(entries: List<NavEntry<T>>): Scene<T>? {
if (windowSizeClass.isWidthAtLeastBreakpoint(WIDTH_DP_LARGE_LOWER_BOUND)) {
val lastThree = entries.takeLast(3)
if (lastThree.size == 3 && lastThree.all { it.metadata.containsKey(MULTI_PANE_KEY) }) {
val firstEntry = lastThree[0]
val secondEntry = lastThree[1]
val thirdEntry = lastThree[2]
return ThreePaneScene(
key = Triple(firstEntry.contentKey, secondEntry.contentKey, thirdEntry.contentKey),
previousEntries = entries.dropLast(3),
firstEntry = firstEntry,
secondEntry = secondEntry,
thirdEntry = thirdEntry
)
}
}
return null
}
}
אתם יכולים להשתמש ב-ThreePaneSceneStrategy עם שיטות אחרות כשאתם יוצרים NavDisplay. לדוגמה, אפשר גם להוסיף TwoPaneStrategy כדי להציג שני חלונות זה לצד זה כשאין מספיק מקום להצגת שלושה חלונות.
val strategy = ThreePaneSceneStrategy() then TwoPaneSceneStrategy()
NavDisplay(...,
sceneStrategy = strategy,
entryProvider = entryProvider {
entry<MyScreen>(metadata = mapOf(MULTI_PANE_KEY to true))) { ... }
... other entries...
}
)
אם אין מספיק מקום להצגת שלושה או שני חלונות – שתי אסטרטגיות הסצנות המותאמות אישית שלנו מחזירות null. במקרה כזה, NavDisplay חוזר להצגת הרשומה האחרונה במקבץ פעילויות קודמות (back stack) בחלונית אחת באמצעות SinglePaneScene.
באמצעות סצנות ואסטרטגיות, אפשר להוסיף לאפליקציה פריסות עם חלונית אחת, שתי חלוניות ושלוש חלוניות.
אפליקציה אדפטיבית שמציגה ניווט בשלושה חלונות במסכים רחבים.
בתיעוד מוסבר איך ליצור פריסות בהתאמה אישית באמצעות סצנות בגרסה 3 של Navigation.
פריסות מותאמות שמוצגות באופן עצמאי
אם אתם צריכים פריסה עצמאית, ספריית Compose Material 3 Adaptive עוזרת לכם ליצור ממשקי משתמש רספונסיביים כמו פריסות של רשימה ופירוט ופריסות של חלונית תומכת, שמותאמות אוטומטית להגדרות החלון על סמך סיווגי גודל החלון או מצבי המכשיר.
החדשות הטובות הן שהספרייה כבר מעודכנת עם נקודות ההפסקה החדשות. החל מגרסה 1.2, פונקציות ברירת המחדל של הנחיית הפיגום של החלונית תומכות בשיעורי גודל חלון ברוחב גדול וגדול במיוחד.
כדי להפעיל את התכונה, צריך להצהיר בקובץ ה-build של Gradle שרוצים להשתמש בנקודות העצירה החדשות:
currentWindowAdaptiveInfo(supportLargeAndXLargeWidth = true)
תחילת העבודה
כדאי להכיר את התכונה 'הצגה במכשיר המחובר' בגרסה האחרונה של Android. אפשר להוריד את Android 16 QPR3 למכשיר נתמך, ואז לחבר אותו לצג חיצוני כדי להתחיל לבדוק את האפליקציה כבר היום.
כדי לקבל מידע נוסף על הטמעה של השיטות המומלצות האלה, אפשר לעיין במסמכי התיעוד המעודכנים בנושא תמיכה במספר מסכים וניהול חלונות.
משוב
המשוב שלכם חשוב לנו מאוד, כי אנחנו ממשיכים לשפר את חוויית השימוש בשולחן העבודה עם צג מחובר. נשמח לקבל ממך משוב ולדווח על בעיות באמצעות ערוצי המשוב הרשמיים שלנו.
אנחנו מחויבים להפוך את Android לפלטפורמה רב-תכליתית שמתאימה לדרכים הרבות שבהן משתמשים רוצים ליצור אינטראקציה עם האפליקציות והמכשירים שלהם. השיפורים בתמיכה בצגים מחוברים הם עוד צעד בכיוון הזה, ואנחנו חושבים שהמשתמשים שלכם יאהבו את חוויית השימוש במחשב שתבנו!
*הערה: בזמן כתיבת המאמר, יש תמיכה במסכים מחוברים בסדרות Pixel 8, 9 ו-10, ובמגוון רחב של מכשירי סמסונג, כולל S26, Fold7, Flip7 ו-Tab S11.
להמשך הקריאה
-
חדשות על מוצרים
אנחנו שמחים להודיע שגרסה 1.5.0 של Jetpack WindowManager יציבה עכשיו! הגרסה הזו מבוססת על היכולת הגבוהה של WindowManager להתאמה, ומאפשרת ליצור בקלות רבה יותר ממשקי משתמש מלוטשים ודינמיים שנראים מצוין בכל גודל מסך.
Francesco Romano • משך הקריאה: 3 דקות
-
חדשות על מוצרים
אם אתם מפתחי Android שרוצים להטמיע תכונות חדשניות מבוססות-AI באפליקציה שלכם, לאחרונה השקנו עדכונים חדשים ומתקדמים.
Thomas Ezan • משך הקריאה: 3 דקות
-
חדשות על מוצרים
Android 17 הגיע לגרסת בטא 4, גרסת הבטא המתוזמנת האחרונה של מחזור הפרסום הזה, אבן דרך קריטית לתאימות אפליקציות ויציבות הפלטפורמה.
Daniel Galpin • משך הקריאה: 4 דקות
כדאי תמיד להיות בעניינים
רוצים לקבל טיפים עדכניים לפיתוח Android ישירות לאימייל כל שבוע?