Ipinapaliwanag namin ang esensya ng Screen Density (Density Buckets) sa Android — ang klasipikasyon ng mga screen ayon sa pixel density: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Tinutukoy ng Screen Density kung gaano karaming physical pixels ang kasya sa isang pulgada ng screen at direktang nakakaapekto sa kung paano lumalabas ang mga imahe at interface sa iba't ibang device. Ayon sa Google Android Compatibility Definition (2025), sinusuportahan ng Android ang 6 na pangunahing Density Buckets at hanggang 8 karagdagang para sa mga foldable device.
Mga Pangunahing Punto
Screen Density (density ng screen) — bilang ng physical pixels bawat pulgada ng screen (ppi — pixels per inch, o dpi — dots per inch). Ginagamit ng Android ang konsepto ng Density Buckets — mga grupo ng screen na may katulad na density kung saan inilalapat ang parehong scaling factor. Hindi tulad ng resolution (bilang ng pixels sa lapad at taas), tinutukoy ng density ang physical size ng pixel sa screen. Ayon sa Google Pixel Team (2025), ang density ng modernong flagship ay 450-550 ppi, na tumutugma sa buckets xxhdpi-xxxhdpi.
Lumitaw ang sistema ng Density Buckets sa Android 1.6 Donut (2009) kasama ang mga unang device sa 160 dpi (mdpi). Sa pagtaas ng resolution ng screen, idinagdag ang mga bagong bucket: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Ang bawat bagong bucket ay sumasalamin sa 1.5 o 2 beses na pagtaas ng density kumpara sa nauna. Ayon sa Android Open Source Project (2025), kasalukuyang 96% ng aktibong Android device ay may density mula hdpi hanggang xxxhdpi.
Density Buckets — mga range ng density na tinukoy ng Google para sa pagpapangkat ng mga Android screen. Base bucket — mdpi (160 dpi). Ang scaling factor ay nagpapakita kung gaano karaming beses ang resource para sa isang bucket ay mas malaki kaysa sa mdpi. Halimbawa, ang xhdpi (2×) ay nangangahulugan na ang imahe ay dapat na 2 beses na mas malaki sa lapad at taas kaysa sa mdpi na bersyon nito. Ayon sa Android Studio Resource Manager (2025), ang xxhdpi ay ang pinakakaraniwang bucket sa mga aktibong device (38% ng merkado), sinundan ng xhdpi (28%).
| Bucket | DPI range | Scale | Halimbawang device | Market share (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Mga lumang budget device | Mas mababa sa 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), 7″ tablet | 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% |
Screen resolution — kabuuang bilang ng pixels sa lapad at taas (hal. 1080×2400). Screen density — bilang ng pixels bawat pulgada. Dalawang device na may parehong resolution ay maaaring magkaiba ng density kung magkaiba ang physical size ng screen. Halimbawa, isang 6-pulgadang telepono na may resolution na 1080×2400 ay may density na mga 440 dpi (xxhdpi), at isang 5-pulgadang telepono na may parehong resolution — mga 530 dpi (xxxhdpi). Ito ang pangunahing pagkakaiba: ang interface ay dapat umangkop sa density, hindi sa resolution, kung hindi ang mga elemento ay magiging masyadong maliit sa mga device na may mataas na density.
Gumagamit ang Android ng qualifiers sa mga pangalan ng res folder para mag-load ng mga resource para sa partikular na screen density: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Sa pagsisimula ng app, pipili ang Android ng mga resource mula sa folder na pinakaangkop sa density ng device. Kung walang eksaktong tugma, kukunin ng system ang pinakamalapit na bucket o isi-scale ang resource mula sa mas mababang density. Ayon sa Android Docs (2025), para sa mga vector (VectorDrawable) hindi kailangan ang density qualifiers — awtomatiko silang nag-scale.
/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)
Sa istrukturang ito, ang bawat folder ay naglalaman ng parehong icon, ngunit sa ibang physical size sa pixels. Ang base size na 48×48 pixels para sa mdpi ay minu-multiply sa scaling factor para sa bawat bucket. Awtomatikong pipili ng Android ang kinakailangang file batay sa DisplayMetrics.density ng device. Para sa VectorDrawable (XML format) sapat na ang isang file sa drawable/ — isi-scale ito ng system nang walang pagkawala ng kalidad.
Pagkalkula ng laki ng imahe para sa bawat density ay batay sa simpleng formula: laki sa mdpi × scale factor. Kung ang icon sa mdpi ay may sukat na 48×48 px, para sa hdpi ito ay magiging 72×72 px (48 × 1.5), para sa xhdpi — 96×96 px (48 × 2), para sa xxhdpi — 144×144 px (48 × 3), para sa xxxhdpi — 192×192 px (48 × 4). Ayon sa Material Design Guidelines (2025), ang formula na ito ay inilalapat sa lahat ng raster resource: icon, background, imahe, at 9-patch.
| Bucket | Scale | Laki mdpi (px) | Laki sa 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 |
Tamang paghahanda ng mga resource para sa Density Buckets ay may kasamang limang pangunahing panuntunan. Una, gamitin ang VectorDrawable para sa mga simpleng icon — tinatanggal nito ang pangangailangan para sa limang kopya. Pangalawa, para sa mga raster image, i-export ang lahat ng density nang sabay-sabay mula sa mga tool sa disenyo (awtomatikong bumubuo ang Android Studio Asset Studio). Pangatlo, iwasan ang paglalagay ng mga imahe sa drawable/ nang walang qualifier — mag-scale ang system na may pagkawala ng kalidad. Pang-apat, subukan sa isang device na may ibang density mula sa iyong pangunahing device — pinapayagan ng emulator ang pagbabago ng density. Panglima, gumamit ng WebP sa halip na PNG — ayon sa Google (2025), ang WebP ay nagbibigay ng 25-35% mas maliit na laki sa parehong kalidad.
Mga Madalas Itanong
mdpi (medium-density pixel-independent) — ang base Density Bucket ng Android na may density na 160 dpi. Ang lahat ng iba pang bucket ay kinakalkula batay sa mdpi: hdpi — 1.5×, xhdpi — 2× at iba pa. Ang mdpi ay tumutugma sa isang physical pixel bawat density-independent pixel (dp). Ang mga designer ay sumasangguni sa mdpi kapag lumilikha ng mga layout.
Gamitin ang DisplayMetrics: ang getResources().getDisplayMetrics().density ay nagbabalik ng scaling factor (1.0 para sa mdpi, 3.0 para sa xxhdpi). Para sa programmatic na pagtukoy ng bucket, tawagan ang getResources().getConfiguration().densityDpi. Sa Android Studio mayroon ding Device Explorer na nagpapakita ng densityDpi para sa nakakonektang device.
Sa teknikal — oo, ngunit may pagkawala ng kalidad. Kung ang resource ay nasa drawable-xxhdpi lamang, sa mdpi device ito ay mababawasan ng 3 beses — magiging malabo ang imahe. Kung ang resource ay nasa mdpi lamang, sa xxhdpi ito ay palalakihin — magkakaroon ng pixelation. Inirerekomenda na maghanda ng hindi bababa sa xhdpi, xxhdpi at xxxhdpi — sumasaklaw ito sa 84% ng mga aktibong device (2025). Para sa VectorDrawable sapat na ang isang file na walang qualifier.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.
Basahin din