Window Size Class — τι είναι, κλάσεις μεγεθών και ανάπτυξη

Συγγραφέας: IT Sectr Δημοσιεύτηκε: 2026-06-08 Χρόνος ανάγνωσης: 9 λεπ

Το 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 για κατηγοριοποίηση του πλάτους παραθύρου σε Compact, Medium και Expanded.
  • Compact — κλάση για στενά παράθυρα έως 600 dp, τυπική για τηλέφωνα σε κατακόρυφη λειτουργία.
  • Medium — κλάση για παράθυρα 600–840 dp, χαρακτηριστική για tablet σε κατακόρυφη λειτουργία και τηλέφωνα σε οριζόντια.
  • Expanded — κλάση για φαρδιά παράθυρα από 840 dp, που συναντώνται σε tablet και επιτραπέζιους υπολογιστές.
  • Material Design 3 χρησιμοποιεί το Window Size Class ως βάση για adaptive layout.

Τι είναι το Window Size Class;

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 θα λάβουν την ίδια κλάση — η διεπαφή θα είναι προβλέψιμα ίδια.

Τρεις κλάσεις μεγέθους παραθύρου Android

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

Το 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.

kotlin
val windowSizeClass = currentWindowAdaptiveInfo().windowSizeClass()

when (windowSizeClass.windowWidthSizeClass) {
    WindowWidthSizeClass.COMPACT -> // συμπαγές πλάτος
    WindowWidthSizeClass.MEDIUM  -> // μεσαίο πλάτος
    WindowWidthSizeClass.EXPANDED -> // εκτεταμένο πλάτος
}

Εκτός από το πλάτος (windowWidthSizeClass), το API παρέχει κλάση για το ύψος παραθύρου (windowHeightSizeClass) — χρήσιμο για οριζόντιο προσανατολισμό και παράθυρα επιτραπέζιου υπολογιστή.

Window Size Class στο Jetpack Compose

Στο Jetpack Compose το Window Size Class χρησιμοποιείται μέσω της συνάρτησης currentWindowAdaptiveInfo(), η οποία επιστρέφει WindowAdaptiveInfo με κλάσεις πλάτους και ύψους. Αυτή η συνάρτηση λαμβάνει υπόψη όχι μόνο το μέγεθος παραθύρου, αλλά και τον τύπο εισόδου (πληκτρολόγιο, ποντίκι, αφή) — μέσω WindowPosture και WindowLayoutInfo.

Τυπικό σενάριο — εναλλαγή μεταξύ διατάξεων ανάλογα με την κλάση. Για παράδειγμα, στο Compact εμφανίζεται ένα BottomSheet με επιλογή, στο Medium — πλευρικό πάνελ, στο Expanded — μόνιμο Navigation Drawer.

kotlin
@Composable
fun AdaptiveNavigation(windowSizeClass: WindowWidthSizeClass) {
    when (windowSizeClass) {
        WindowWidthSizeClass.COMPACT -> BottomNavigation()
        WindowWidthSizeClass.MEDIUM  -> NavigationRail()
        WindowWidthSizeClass.EXPANDED -> NavigationDrawer()
    }
}

Στο Material Design 3 τα στοιχεία NavigationSuiteScaffold προσαρμόζονται αυτόματα στο Window Size Class — ο προγραμματιστής δεν χρειάζεται να γράψει υπό συνθήκη λογική.

Window Size Class και Material Design 3

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 ComponentPane Scaffold
CompactBottom NavigationΚρυφό πάνελ
MediumNavigation RailΣυρόμενο πάνελ
ExpandedNavigation DrawerΜόνιμο πάνελ

Πλεονεκτήματα προσαρμοστικών διατάξεων

Η χρήση του Window Size Class παρέχει τρία βασικά πλεονεκτήματα στην ανάπτυξη κινητών. Πρώτο — προβλεψιμότητα: αντί για εκατοντάδες συνδυασμούς μεγεθών οθόνης, ο προγραμματιστής εργάζεται με τρεις κλάσεις. Αυτό μειώνει δραστικά τον αριθμό των σεναρίων δοκιμής και σφαλμάτων που σχετίζονται με τη διάταξη.

Δεύτερο — αυτόματη προσαρμογή σε λειτουργία πολλαπλών παραθύρων. Όταν ο χρήστης εισέρχεται στο Split Screen, το πλάτος παραθύρου αλλάζει — το Window Size Class υπολογίζεται άμεσα εκ νέου και η διεπαφή προσαρμόζεται. Χωρίς αυτό το API, η εφαρμογή σε διαιρεμένη οθόνη εμφανίζει μια περικομμένη έκδοση της διεπαφής τηλεφώνου.

Τρίτο — συνέπεια με το Material Design 3. Η Google ενσωμάτωσε το Window Size Class στο σύστημα προσαρμοστικών στοιχείων, έτσι οι διεπαφές που βασίζονται στο Material 3 ακολουθούν αυτόματα τις συστάσεις της Google για σχεδιασμό μεγάλης οθόνης χωρίς επιπλέον εργασία.

Συχνές Ερωτήσεις

Σε τι διαφέρει το Window Size Class από το Screen Size Buckets;

Screen Size Buckets (small/large/xlarge) — μια ξεπερασμένη προσέγγιση Android 1.6–6.0 που βασίζεται στο φυσικό μέγεθος οθόνης. Το Window Size Class εστιάζει στο διαθέσιμο πλάτος παραθύρου σε dp και λειτουργεί σε πραγματικό χρόνο όταν αλλάζει το μέγεθος παραθύρου.

Χρειάζεται υποστήριξη του Window Size Class σε Android 6 και παλαιότερα;

Το Window Size Class είναι διαθέσιμο μέσω Jetpack WindowManager σε Android 7.0+ με βιβλιοθήκη backport. Για Android 6 και παλαιότερα — μόνο Compact, καθώς το multi-window απουσιάζει. Χρησιμοποιήστε fallback μέσω WindowMetrics.

Πώς λειτουργεί το Window Size Class σε αναδιπλούμενες συσκευές;

Κατά το άνοιγμα της συσκευής, το πλάτος παραθύρου αλλάζει και το Window Size Class υπολογίζεται αυτόματα εκ νέου. Η κλάση μπορεί να αλλάξει από Compact σε Expanded λόγω αύξησης της διαθέσιμης περιοχής.

Μπορεί να χρησιμοποιηθεί το Window Size Class σε XML (Views);

Ναι, μέσω WindowManager σε Activity ή Fragment. Αφού λάβετε το WindowSizeClass, χρησιμοποιήστε λογική υπό συνθήκη για εναλλαγή μεταξύ διατάξεων XML ή αλλαγή ορατότητας View.

Ποια όρια χρησιμοποιούνται για το WindowHeightSizeClass;

Για το ύψος παραθύρου, τα όρια είναι διαφορετικά: Compact — έως 480 dp, Medium — 480–900 dp, Expanded — από 900 dp. Το WindowHeightSizeClass είναι χρήσιμο σε οριζόντιο προσανατολισμό και σε επιτραπέζιο υπολογιστή.

Σύνοψη

  • Window Size Class — API Jetpack WindowManager για κατηγοριοποίηση πλάτους παραθύρου σε Compact, Medium και Expanded.
  • Compact — έως 600 dp, διεπαφή μιας στήλης, Bottom Navigation.
  • Medium — 600–840 dp, διεπαφή δύο στηλών, Navigation Rail.
  • Expanded — από 840 dp, διεπαφή πολλαπλών πάνελ, Navigation Drawer.
  • Jetpack Compose — συνάρτηση currentWindowAdaptiveInfo() για λήψη κλάσης κατά τον χρόνο εκτέλεσης.
  • Material Design 3 — προσαρμοστικά στοιχεία αντιδρούν αυτόματα στο Window Size Class.
  • Συμπέρασμα — το Window Size Class αντικαθιστά την παραδοσιακή προσαρμογή σε breakpoints και καθιστά τις διεπαφές προβλέψιμες σε όλες τις συσκευές.

Θα αναπτύξουμε μια εφαρμογή για κινητά έτοιμη για χρήση

Η IT Sectr δημιουργεί εφαρμογές iOS και Android για νεοφυείς επιχειρήσεις και επιχειρήσεις από το 2017. Θα σας συμβουλεύσουμε και θα προτείνουμε την καλύτερη λύση.

Συζήτηση έργου

Διαβάστε επίσης