Το Window Size Class είναι ένα API από το Jetpack WindowManager που χωρίζει το παράθυρο της εφαρμογής σε τρεις κατηγορίες: Compact, Medium και Expanded. Αντί να ελέγχει τη φυσική ανάλυση ή την πυκνότητα pixel, οι κλάσεις αναλύουν το διαθέσιμο πλάτος σε dp — αυτό δίνει προβλέψιμο αποτέλεσμα σε οποιαδήποτε συσκευή. Σύμφωνα με το Android Developers Documentation (2025), το Window Size Class έγινε το πρότυπο για προσαρμοστικές διεπαφές στο Jetpack Compose και στο σύστημα View χάρη στο WindowManager.
Κύρια Σημεία
Window Size Class είναι ένα API της πλατφόρμας Android, μέρος της βιβλιοθήκης Jetpack WindowManager, που ταξινομεί τον διαθέσιμο χώρο του παραθύρου της εφαρμογής σε τρεις κατηγορίες. Σε αντίθεση με την παραδοσιακή προσέγγιση με ποσοτικοποιητές πόρων (small/large/xlarge), το Window Size Class παρέχει ένα διακριτό σύνολο τιμών στις οποίες μπορεί να βασιστεί ο προγραμματιστής κατά τον σχεδιασμό της διεπαφής.
Το API εμφανίστηκε στο Android 7.0 Nougat ως μέρος υποστήριξης για λειτουργία πολλαπλών παραθύρων, αλλά η ενεργή εφαρμογή ξεκίνησε με το Jetpack WindowManager 1.1 (2022). Η Google συνιστά το Window Size Class ως το κύριο εργαλείο για τη δημιουργία προσαρμοστικών διατάξεων αντί του ελέγχου του πλάτους οθόνης μέσω Display.getSize().
Η ταξινόμηση βασίζεται στο πλάτος του παραθύρου σε dp, όχι στο φυσικό μέγεθος ή την πυκνότητα pixel. Αυτό σημαίνει ότι δύο συσκευές με διαφορετική ανάλυση αλλά ίδιο πλάτος σε dp θα λάβουν την ίδια κλάση — η διεπαφή θα είναι προβλέψιμα ίδια.
Compact — κλάση για παράθυρα με πλάτος έως 600 dp. Τηλέφωνο σε κατακόρυφη λειτουργία, τα περισσότερα αναδιπλούμενα τηλέφωνα (Galaxy Z Flip) σε κλειστή κατάσταση. Η διεπαφή χτίζεται σε μία στήλη, πλοήγηση μέσω Bottom Navigation.
Medium — κλάση για παράθυρα με πλάτος 600–840 dp. Tablet σε κατακόρυφη λειτουργία, τηλέφωνο σε οριζόντια, αναδιπλούμενη συσκευή σε μισάνοιχτη κατάσταση. Η διεπαφή χρησιμοποιεί δύο στήλες — για παράδειγμα, λίστα αριστερά και λεπτομέρειες δεξιά. Το Navigation Rail αντικαθιστά το Bottom Navigation.
Expanded — κλάση για παράθυρα με πλάτος από 840 dp. Tablet σε οριζόντια λειτουργία, παράθυρο επιτραπέζιου υπολογιστή, αναδιπλούμενη συσκευή σε ανοιχτή κατάσταση. Η διεπαφή μπορεί να χρησιμοποιεί τρία ή περισσότερα πάνελ, Permanent Navigation Drawer, πάνελ εργαλείων.
Στο Material Design 3 για κάθε κλάση ορίζονται προσαρμοστικά στοιχεία: Navigation Rail για Medium, Navigation Drawer για Expanded, Bottom Navigation για Compact. Ο προγραμματιστής δεν χρειάζεται να επιλέξει breakpoints — έχουν ήδη οριστεί από το API.
Το Window Size Class υπολογίζεται βάσει του τρέχοντος πλάτους του παραθύρου της εφαρμογής σε dp, λαμβάνοντας υπόψη τα στοιχεία συστήματος — γραμμή κατάστασης, πάνελ πλοήγησης, διαίρεση οθόνης σε Split Screen. Το API αντιδρά στην αλλαγή διαμόρφωσης παραθύρου: περιστροφή συσκευής, είσοδος σε λειτουργία πολλαπλών παραθύρων, άνοιγμα αναδιπλούμενης συσκευής.
Για τη λήψη της κλάσης χρησιμοποιείται η κλάση WindowSizeClass από τη βιβλιοθήκη androidx.window. Ο προγραμματιστής εγγράφεται στο Flow (Kotlin) ή LiveData (Java), που ενημερώνει αυτόματα την κλάση σε κάθε αλλαγή μεγέθους παραθύρου — χωρίς χειροκίνητη επεξεργασία του onConfigurationChanged.
Η ταξινόμηση γίνεται σε τρία βήματα. Πρώτο — μέτρηση του τρέχοντος πλάτους παραθύρου σε pixel. Δεύτερο — μετατροπή σε dp μέσω DisplayMetrics.density. Τρίτο — σύγκριση της τιμής που προέκυψε με τα όρια: λιγότερο από 600 dp — Compact, 600–840 — Medium, από 840 — Expanded.
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()
when (windowSizeClass.windowWidthSizeClass) {
WindowWidthSizeClass.COMPACT -> // συμπαγές πλάτος
WindowWidthSizeClass.MEDIUM -> // μεσαίο πλάτος
WindowWidthSizeClass.EXPANDED -> // εκτεταμένο πλάτος
}
Εκτός από το πλάτος (windowWidthSizeClass), το API παρέχει κλάση για το ύψος παραθύρου (windowHeightSizeClass) — χρήσιμο για οριζόντιο προσανατολισμό και παράθυρα επιτραπέζιου υπολογιστή.
Στο Jetpack Compose το Window Size Class χρησιμοποιείται μέσω της συνάρτησης currentWindowAdaptiveInfo(), η οποία επιστρέφει WindowAdaptiveInfo με κλάσεις πλάτους και ύψους. Αυτή η συνάρτηση λαμβάνει υπόψη όχι μόνο το μέγεθος παραθύρου, αλλά και τον τύπο εισόδου (πληκτρολόγιο, ποντίκι, αφή) — μέσω WindowPosture και WindowLayoutInfo.
Τυπικό σενάριο — εναλλαγή μεταξύ διατάξεων ανάλογα με την κλάση. Για παράδειγμα, στο Compact εμφανίζεται ένα BottomSheet με επιλογή, στο Medium — πλευρικό πάνελ, στο Expanded — μόνιμο Navigation Drawer.
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
when (windowSizeClass) {
WindowWidthSizeClass.COMPACT -> BottomNavigation()
WindowWidthSizeClass.MEDIUM -> NavigationRail()
WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
}
}
Στο Material Design 3 τα στοιχεία NavigationSuiteScaffold προσαρμόζονται αυτόματα στο Window Size Class — ο προγραμματιστής δεν χρειάζεται να γράψει υπό συνθήκη λογική.
Material Design 3 (Material You) είναι πλήρως ενσωματωμένο με το Window Size Class. Το σύστημα adaptive layout στο Material 3 καθορίζει ποιο στοιχείο πλοήγησης να χρησιμοποιηθεί σε κάθε κλάση: BottomNavigation για Compact, NavigationRail για Medium, NavigationDrawer για Expanded.
Αυτή η ενσωμάτωση λειτουργεί σε επίπεδο Adaptive API, το οποίο συνδυάζει το Window Size Class με άλλα σήματα — FoldState (αναδιπλούμενη συσκευή) και WindowPosture (θέση οθόνης). Το Adaptive API είναι διαθέσιμο μέσω της βιβλιοθήκης material3-adaptive.
Το Material 3 παρέχει τέσσερα προσαρμοστικά στοιχεία υψηλού επιπέδου: ListDetailPaneScaffold, SupportingPaneScaffold, NavigationSuiteScaffold και AdaptiveSheet. Κάθε ένα από αυτά αλλάζει τη συμπεριφορά του ανάλογα με το Window Size Class χωρίς πρόσθετη διαμόρφωση.
| Κλάση | Navigation Component | Pane Scaffold |
|---|---|---|
| Compact | Bottom Navigation | Κρυφό πάνελ |
| Medium | Navigation Rail | Συρόμενο πάνελ |
| Expanded | Navigation Drawer | Μόνιμο πάνελ |
Η χρήση του Window Size Class παρέχει τρία βασικά πλεονεκτήματα στην ανάπτυξη κινητών. Πρώτο — προβλεψιμότητα: αντί για εκατοντάδες συνδυασμούς μεγεθών οθόνης, ο προγραμματιστής εργάζεται με τρεις κλάσεις. Αυτό μειώνει δραστικά τον αριθμό των σεναρίων δοκιμής και σφαλμάτων που σχετίζονται με τη διάταξη.
Δεύτερο — αυτόματη προσαρμογή σε λειτουργία πολλαπλών παραθύρων. Όταν ο χρήστης εισέρχεται στο Split Screen, το πλάτος παραθύρου αλλάζει — το Window Size Class υπολογίζεται άμεσα εκ νέου και η διεπαφή προσαρμόζεται. Χωρίς αυτό το API, η εφαρμογή σε διαιρεμένη οθόνη εμφανίζει μια περικομμένη έκδοση της διεπαφής τηλεφώνου.
Τρίτο — συνέπεια με το Material Design 3. Η Google ενσωμάτωσε το Window Size Class στο σύστημα προσαρμοστικών στοιχείων, έτσι οι διεπαφές που βασίζονται στο Material 3 ακολουθούν αυτόματα τις συστάσεις της Google για σχεδιασμό μεγάλης οθόνης χωρίς επιπλέον εργασία.
Συχνές Ερωτήσεις
Screen Size Buckets (small/large/xlarge) — μια ξεπερασμένη προσέγγιση Android 1.6–6.0 που βασίζεται στο φυσικό μέγεθος οθόνης. Το Window Size Class εστιάζει στο διαθέσιμο πλάτος παραθύρου σε dp και λειτουργεί σε πραγματικό χρόνο όταν αλλάζει το μέγεθος παραθύρου.
Το Window Size Class είναι διαθέσιμο μέσω Jetpack WindowManager σε Android 7.0+ με βιβλιοθήκη backport. Για Android 6 και παλαιότερα — μόνο Compact, καθώς το multi-window απουσιάζει. Χρησιμοποιήστε fallback μέσω WindowMetrics.
Κατά το άνοιγμα της συσκευής, το πλάτος παραθύρου αλλάζει και το Window Size Class υπολογίζεται αυτόματα εκ νέου. Η κλάση μπορεί να αλλάξει από Compact σε Expanded λόγω αύξησης της διαθέσιμης περιοχής.
Ναι, μέσω WindowManager σε Activity ή Fragment. Αφού λάβετε το WindowSizeClass, χρησιμοποιήστε λογική υπό συνθήκη για εναλλαγή μεταξύ διατάξεων XML ή αλλαγή ορατότητας View.
Για το ύψος παραθύρου, τα όρια είναι διαφορετικά: Compact — έως 480 dp, Medium — 480–900 dp, Expanded — από 900 dp. Το WindowHeightSizeClass είναι χρήσιμο σε οριζόντιο προσανατολισμό και σε επιτραπέζιο υπολογιστή.
Σύνοψη
Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση
Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.
Διαβάστε επίσης