Screen Density: ουσία, πυκνότητα pixel στο Android

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

Εξηγούμε την ουσία του Screen Density (Density Buckets) στο Android — την ταξινόμηση οθονών ανά πυκνότητα pixel: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Το Screen Density καθορίζει πόσα φυσικά pixel χωρούν σε μία ίντσα οθόνης και επηρεάζει άμεσα το πώς εμφανίζονται οι εικόνες και η διεπαφή σε διαφορετικές συσκευές. Σύμφωνα με το Google Android Compatibility Definition (2025), το Android υποστηρίζει 6 κύρια Density Buckets και έως 8 επιπλέον για αναδιπλούμενες συσκευές.

Κύρια σημεία

  • Screen Density — αριθμός φυσικών pixel ανά ίντσα (PPI). Το Android ομαδοποιεί οθόνες σε Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi.
  • Το βασικό bucket — mdpi (160 dpi). Όλα τα υπόλοιπα υπολογίζονται σε σχέση με αυτό: hdpi = 1.5×, xhdpi = 2×, xxhdpi = 3×, xxxhdpi = 4×.
  • Οι πόροι για διαφορετικές πυκνότητες αποθηκεύονται σε χαρακτηρισμένους φακέλους res/drawable-{density}.
  • Σύμφωνα με το Android Studio (2025), η πιο κοινή πυκνότητα σε σύγχρονες συσκευές είναι xxhdpi (420+ dpi, 3×).
  • Το Screen Density δεν εξαρτάται από την ανάλυση οθόνης — δύο συσκευές με την ίδια ανάλυση μπορεί να έχουν διαφορετική πυκνότητα.

Τι είναι το Screen Density;

Screen Density (πυκνότητα οθόνης) — ο αριθμός φυσικών pixel ανά ίντσα οθόνης (ppi — pixels per inch, ή dpi — dots per inch). Το Android χρησιμοποιεί την έννοια των Density Buckets — ομάδες οθονών με παρόμοια πυκνότητα, για τις οποίες εφαρμόζονται οι ίδιοι συντελεστές κλίμακας. Σε αντίθεση με την ανάλυση (αριθμός pixel σε πλάτος και ύψος), η πυκνότητα καθορίζει το φυσικό μέγεθος του pixel στην οθόνη. Σύμφωνα με το Google Pixel Team (2025), η πυκνότητα των σύγχρονων ναυαρχίδων είναι 450-550 ppi, που αντιστοιχεί στα buckets xxhdpi-xxxhdpi.

Ιστορία και εξέλιξη των Density Buckets

Το σύστημα Density Buckets εμφανίστηκε στο Android 1.6 Donut (2009) με τις πρώτες συσκευές στα 160 dpi (mdpi). Με την αύξηση της ανάλυσης οθόνης, προστέθηκαν νέα buckets: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Κάθε νέο bucket αντανακλούσε 1.5 ή 2 φορές αύξηση της πυκνότητας σε σχέση με το προηγούμενο. Σύμφωνα με το Android Open Source Project (2025), επί του παρόντος το 96% των ενεργών συσκευών Android έχουν πυκνότητα από hdpi έως xxxhdpi.

Density Buckets: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi

Density Buckets — εύρη πυκνότητας που ορίζονται από την Google για την ομαδοποίηση οθονών Android. Το βασικό bucket — mdpi (160 dpi). Ο συντελεστής κλίμακας (scale factor) δείχνει πόσες φορές ο πόρος για ένα συγκεκριμένο bucket είναι μεγαλύτερος από το mdpi. Για παράδειγμα, xhdpi (2×) σημαίνει ότι η εικόνα πρέπει να είναι 2 φορές μεγαλύτερη σε πλάτος και ύψος από την έκδοση mdpi. Σύμφωνα με το Android Studio Resource Manager (2025), το xxhdpi είναι το πιο κοινό bucket μεταξύ ενεργών συσκευών (38% της αγοράς), ακολουθούμενο από xhdpi (28%).

BucketΕύρος DPIScaleΠαράδειγμα συσκευήςΜερίδιο αγοράς (2025)
ldpi120 dpi0.75×Παλιές οικονομικές συσκευέςΛιγότερο από 1%
mdpi120-160 dpiHTC Dream (G1), ταμπλέτες 7″3%
hdpi160-240 dpi1.5×Samsung Galaxy S2, Nexus 412%
xhdpi240-320 dpiGoogle Nexus 5, Moto G28%
xxhdpi320-480 dpiSamsung Galaxy S8, Pixel 338%
xxxhdpi480-640 dpiSamsung Galaxy S24 Ultra, Pixel 9 Pro18%

Πυκνότητα pixel vs ανάλυση οθόνης: ποια είναι η διαφορά

Ανάλυση οθόνης — ο συνολικός αριθμός pixel σε πλάτος και ύψος (π.χ. 1080×2400). Πυκνότητα οθόνης — αριθμός pixel ανά ίντσα. Δύο συσκευές με την ίδια ανάλυση μπορεί να έχουν διαφορετική πυκνότητα εάν τα φυσικά μεγέθη οθόνης διαφέρουν. Για παράδειγμα, ένα τηλέφωνο 6 ιντσών με ανάλυση 1080×2400 έχει πυκνότητα περίπου 440 dpi (xxhdpi), ενώ ένα τηλέφωνο 5 ιντσών με την ίδια ανάλυση — περίπου 530 dpi (xxxhdpi). Αυτή είναι η βασική διαφορά: η διεπαφή πρέπει να προσαρμόζεται στην πυκνότητα, όχι στην ανάλυση, διαφορετικά τα στοιχεία θα είναι πολύ μικρά σε συσκευές υψηλής πυκνότητας.

Προσδιοριστικά πόρων πυκνότητας στο Android

Το Android χρησιμοποιεί qualifiers στα ονόματα φακέλων res για φόρτωση πόρων για συγκεκριμένη πυκνότητα οθόνης: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Κατά την εκκίνηση της εφαρμογής, το Android επιλέγει πόρους από τον φάκελο που ταιριάζει καλύτερα στην πυκνότητα της συσκευής. Εάν δεν υπάρχει ακριβής αντιστοιχία, το σύστημα παίρνει το πλησιέστερο bucket ή κλιμακώνει τον πόρο από χαμηλότερη πυκνότητα. Σύμφωνα με το Android Docs (2025), για διανύσματα (VectorDrawable) δεν απαιτούνται προσδιοριστικά πυκνότητας — κλιμακώνονται αυτόματα.

XML

/res/
    drawable-mdpi/
        icon_app.png  (48x48 px)
    drawable-hdpi/
        icon_app.png  (72x72 px)
    drawable-xhdpi/
        icon_app.png  (96x96 px)
    drawable-xxhdpi/
        icon_app.png  (144x144 px)
    drawable-xxxhdpi/
        icon_app.png  (192x192 px)

Σε αυτή τη δομή, κάθε φάκελος περιέχει το ίδιο εικονίδιο, αλλά σε διαφορετικό φυσικό μέγεθος σε pixel. Το βασικό μέγεθος 48×48 pixel για mdpi πολλαπλασιάζεται με τον συντελεστή κλίμακας για κάθε bucket. Το Android επιλέγει αυτόματα το απαιτούμενο αρχείο βάσει του DisplayMetrics.density της συσκευής. Για VectorDrawable (μορφή XML) αρκεί ένα αρχείο στο drawable/ — το σύστημα το κλιμακώνει χωρίς απώλεια ποιότητας.

Υπολογισμός pixel για κάθε πυκνότητα

Υπολογισμός μεγέθους εικόνας για κάθε πυκνότητα βασίζεται σε έναν απλό τύπο: μέγεθος σε mdpi × scale factor. Εάν το εικονίδιο σε mdpi έχει μέγεθος 48×48 px, τότε για hdpi θα είναι 72×72 px (48 × 1.5), για xhdpi — 96×96 px (48 × 2), για xxhdpi — 144×144 px (48 × 3), για xxxhdpi — 192×192 px (48 × 4). Σύμφωνα με το Material Design Guidelines (2025), αυτός ο τύπος εφαρμόζεται για όλους τους πόρους raster: εικονίδια, φόντα, εικόνες και 9-patch.

BucketScaleΜέγεθος mdpi (px)Μέγεθος σε bucket (px)
mdpi48×4848×48
hdpi1.5×48×4872×72
xhdpi48×4896×96
xxhdpi48×48144×144
xxxhdpi48×48192×192

Βέλτιστες πρακτικές προετοιμασίας πόρων για όλες τις πυκνότητες

Σωστή προετοιμασία πόρων για Density Buckets περιλαμβάνει πέντε βασικούς κανόνες. Πρώτον, χρησιμοποιήστε VectorDrawable για απλά εικονίδια — αυτό εξαλείφει την ανάγκη για πέντε αντίγραφα. Δεύτερον, για εικόνες raster, εξάγετε όλες τις πυκνότητες ταυτόχρονα από εργαλεία σχεδιασμού (το Android Studio Asset Studio δημιουργεί αυτόματα). Τρίτον, αποφύγετε την τοποθέτηση εικόνων σε drawable/ χωρίς προσδιοριστικό — το σύστημα θα κλιμακώσει με απώλεια ποιότητας. Τέταρτον, δοκιμάστε σε συσκευή με διαφορετική πυκνότητα από την κύρια — ο εξομοιωτής επιτρέπει την αλλαγή πυκνότητας. Πέμπτον, χρησιμοποιήστε WebP αντί για PNG — σύμφωνα με την Google (2025), το WebP προσφέρει 25-35% μικρότερο μέγεθος στην ίδια ποιότητα.

  • VectorDrawable — προτιμώμενη μορφή για εικονίδια και απλές εικονογραφήσεις. Ένα αρχείο XML αντικαθιστά 5 PNG.
  • Android Studio Asset Studio — αυτόματη δημιουργία πόρων για όλες τις πυκνότητες από SVG ή PNG.
  • WebP με lossless — βέλτιστη μορφή για φωτογραφίες. 30% μικρότερο από PNG χωρίς απώλεια ποιότητας.
  • 9-patch — για κλιμακούμενα φόντα. Ένα αρχείο λειτουργεί σε όλες τις πυκνότητες με σωστή ρύθμιση περιοχών τεντώματος.
  • Adaptive Icons — μορφή εικονιδίων για API 26+. Επιτρέπει ξεχωριστή ρύθμιση foreground και background για διαφορετικές πυκνότητες.

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

Τι σημαίνει mdpi στο Android;

mdpi (medium-density pixel-independent) — το βασικό Density Bucket του Android με πυκνότητα 160 dpi. Όλα τα άλλα buckets υπολογίζονται σε σχέση με το mdpi: hdpi — 1.5×, xhdpi — 2× και ούτω καθεξής. Το mdpi αντιστοιχεί σε ένα φυσικό pixel ανά density-independent pixel (dp). Οι σχεδιαστές βασίζονται στο mdpi κατά τη δημιουργία μακετών.

Πώς μπορώ να μάθω την πυκνότητα οθόνης μιας συσκευής Android;

Χρησιμοποιήστε DisplayMetrics: το getResources().getDisplayMetrics().density επιστρέφει τον συντελεστή κλίμακας (1.0 για mdpi, 3.0 για xxhdpi). Για προγραμματιστικό προσδιορισμό του bucket, καλέστε getResources().getConfiguration().densityDpi. Στο Android Studio υπάρχει επίσης το Device Explorer που δείχνει το densityDpi για τη συνδεδεμένη συσκευή.

Είναι υποχρεωτικό να προετοιμάζω πόρους για όλες τις πυκνότητες;

Τεχνικά — ναι, αλλά με απώλεια ποιότητας. Εάν ο πόρος υπάρχει μόνο σε drawable-xxhdpi, σε συσκευή mdpi θα μειωθεί 3 φορές — η εικόνα θα γίνει θολή. Εάν ο πόρος είναι μόνο σε mdpi, σε xxhdpi θα μεγεθυνθεί — θα εμφανιστεί pixelization. Συνιστάται η προετοιμασία τουλάχιστον για xhdpi, xxhdpi και xxxhdpi — αυτό καλύπτει το 84% των ενεργών συσκευών (2025). Για VectorDrawable αρκεί ένα αρχείο χωρίς προσδιοριστικό.

Σύνοψη

  • Screen Density — αριθμός φυσικών pixel ανά ίντσα (dpi/ppi). Το Android ομαδοποιεί οθόνες σε Density Buckets: mdpi (1×), hdpi (1.5×), xhdpi (2×), xxhdpi (3×), xxxhdpi (4×).
  • Το βασικό bucket mdpi = 160 dpi. Τα υπόλοιπα υπολογίζονται ως mdpi × scale factor.
  • Οι πόροι για διαφορετικές πυκνότητες αποθηκεύονται σε χαρακτηρισμένους φακέλους res/drawable-{bucket}.
  • xxhdpi — το πιο κοινό bucket (38%), ακολουθούμενο από xhdpi (28%) και xxxhdpi (18%).
  • Το VectorDrawable αντικαθιστά 5 αρχεία raster και κλιμακώνεται χωρίς απώλεια ποιότητας.
  • Χρησιμοποιήστε WebP αντί για PNG για εξοικονόμηση 30% σε κίνηση και χώρο.

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

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

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

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