Nous expliquons l'essence de Screen Density (Density Buckets) dans Android — la classification des écrans par densité de pixels : mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density détermine le nombre de pixels physiques contenus dans un pouce d'écran et affecte directement la façon dont les images et l'interface sont affichées sur différents appareils. Selon Google Android Compatibility Definition (2025), Android prend en charge 6 Density Buckets principaux et jusqu'à 8 supplémentaires pour les appareils pliables.
Points clés
Screen Density est le nombre de pixels physiques par pouce d'écran (ppi — pixels par pouce, ou dpi — points par pouce). Android utilise le concept de Density Buckets — des groupes d'écrans de densité similaire qui utilisent les mêmes facteurs d'échelle. Contrairement à la résolution (nombre de pixels en largeur et hauteur), la densité détermine la taille physique d'un pixel à l'écran. Selon Google Pixel Team (2025), la densité des flagships modernes est de 450 à 550 ppi, ce qui correspond au bucket xxhdpi-xxxhdpi.
Le système de Density Buckets est apparu dans Android 1.6 Donut (2009) avec les premiers appareils à 160 dpi (mdpi). Avec l'augmentation des résolutions d'écran, de nouveaux buckets ont été ajoutés : hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Chaque nouveau bucket reflétait une augmentation de densité de 1.5× ou 2× par rapport au précédent. Selon Android Open Source Project (2025), 96% des appareils Android actifs ont désormais des densités allant de hdpi à xxxhdpi.
Density Buckets sont des plages de densité définies par Google pour regrouper les écrans Android. Le bucket de base est mdpi (160 dpi). Le facteur d'échelle indique combien de fois une ressource pour un bucket donné est plus grande que celle pour mdpi. Par exemple, xhdpi (2×) signifie que l'image doit être 2 fois plus grande en largeur et en hauteur que sa version mdpi. Selon Android Studio Resource Manager (2025), xxhdpi est le bucket le plus courant parmi les appareils actifs (38% de part de marché), suivi de xhdpi (28%).
| Bucket | Plage DPI | Échelle | Exemple d'appareil | Part de marché (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Anciens appareils économiques | Moins de 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), tablettes 7" | 3% |
| hdpi | 160-240 dpi | 1.5× | Samsung Galaxy S2, Nexus 4 | 12% |
| xhdpi | 240-320 dpi | 2× | Google Nexus 5, Moto G | 28% |
| xxhdpi | 320-480 dpi | 3× | Samsung Galaxy S8, Pixel 3 | 38% |
| xxxhdpi | 480-640 dpi | 4× | Samsung Galaxy S24 Ultra, Pixel 9 Pro | 18% |
La résolution d'écran est le nombre total de pixels en largeur et hauteur (ex. 1080×2400). La densité d'écran est le nombre de pixels par pouce. Deux appareils avec la même résolution peuvent avoir des densités différentes si leurs tailles physiques d'écran diffèrent. Par exemple, un téléphone de 6 pouces avec une résolution de 1080×2400 a une densité d'environ 440 dpi (xxhdpi), tandis qu'un téléphone de 5 pouces avec la même résolution a environ 530 dpi (xxxhdpi). C'est une différence clé : l'interface doit s'adapter non pas à la résolution mais à la densité, sinon les éléments seront trop petits sur les appareils à haute densité.
Android utilise des qualificateurs dans les noms de dossiers res pour charger des ressources pour une densité d'écran spécifique : drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Au démarrage de l'application, Android sélectionne les ressources du dossier qui correspond le mieux à la densité de l'appareil. S'il n'y a pas de correspondance exacte, le système utilise le bucket le plus proche ou met à l'échelle une ressource d'une densité inférieure. Selon Android Docs (2025), les qualificateurs de densité ne sont pas nécessaires pour les vecteurs (VectorDrawable) — ils se mettent à l'échelle automatiquement.
/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)
Dans cette structure, chaque dossier contient la même icône mais dans une taille physique de pixel différente. La taille de base de 48×48 pixels pour mdpi est multipliée par le facteur d'échelle pour chaque bucket. Android sélectionne automatiquement le fichier correct en fonction de DisplayMetrics.density de l'appareil. Pour VectorDrawable (format XML), un seul fichier dans drawable/ suffit — le système le met à l'échelle sans perte de qualité.
Le calcul de la taille d'une image pour chaque densité repose sur une formule simple : taille en mdpi × facteur d'échelle. Si une icône en mdpi fait 48×48 px, alors pour hdpi elle fera 72×72 px (48 × 1.5), pour xhdpi — 96×96 px (48 × 2), pour xxhdpi — 144×144 px (48 × 3), pour xxxhdpi — 192×192 px (48 × 4). Selon les Material Design Guidelines (2025), cette formule s'applique à toutes les ressources raster : icônes, fonds, images et 9-patch.
| Bucket | Échelle | Taille mdpi (px) | Taille dans le bucket (px) |
|---|---|---|---|
| mdpi | 1× | 48×48 | 48×48 |
| hdpi | 1.5× | 48×48 | 72×72 |
| xhdpi | 2× | 48×48 | 96×96 |
| xxhdpi | 3× | 48×48 | 144×144 |
| xxxhdpi | 4× | 48×48 | 192×192 |
La bonne préparation des ressources pour Density Buckets comprend cinq règles clés. Premièrement, utilisez VectorDrawable pour les icônes simples — cela élimine le besoin de cinq copies. Deuxièmement, pour les images raster, exportez toutes les densités depuis les outils de conception (Android Studio Asset Studio les génère automatiquement). Troisièmement, évitez de placer des images dans drawable/ sans qualificateur — le système les mettra à l'échelle avec perte de qualité. Quatrièmement, testez sur un appareil avec une densité différente de votre appareil principal — l'émulateur permet de changer la densité. Cinquièmement, utilisez WebP au lieu de PNG — selon Google (2025), WebP offre une taille 25 à 35% inférieure à qualité égale.
Foire aux questions
mdpi (medium-density pixel-independent) — le bucket de densité de base dans Android avec une densité de 160 dpi. Tous les autres buckets sont calculés par rapport à mdpi : hdpi — 1.5×, xhdpi — 2×, etc. mdpi correspond à un pixel physique par pixel indépendant de la densité (dp). Les concepteurs utilisent mdpi comme référence lors de la création de maquettes.
Utilisez DisplayMetrics : getResources().getDisplayMetrics().density renvoie le facteur d'échelle (1.0 pour mdpi, 3.0 pour xxhdpi). Pour déterminer programmatiquement le bucket, appelez getResources().getConfiguration().densityDpi. Android Studio dispose également d'un Device Explorer qui affiche densityDpi pour les appareils connectés.
Techniquement — oui, mais avec une perte de qualité. Si une ressource n'est disponible que dans drawable-xxhdpi, sur un appareil mdpi elle sera réduite 3× — l'image deviendra floue. Si la ressource n'est que dans mdpi, sur xxhdpi elle sera agrandie — pixellisation. Il est recommandé de préparer au moins pour xhdpi, xxhdpi et xxxhdpi — cela couvre 84% des appareils actifs (2025). Pour VectorDrawable, un seul fichier sans qualificateur suffit.
Résumé
Nous développerons une application mobile clé en main
IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.
Lisez aussi