Droid10

mdpi / hdpi / xhdpi / xxhdpi converter

Convert an asset size from one Android drawable folder to all the others, look up the exact launcher and notification icon pixels for every density, and find out which folder a non-standard density actually reads from. Everything runs in your browser.

Convert from one drawable folder to every other

48 px at 160 dpi = 48.00 dp

FolderDensityScalePixel size
drawable-ldpi120 dpi0.75×36 px
drawable-mdpi160 dpi1×48 px
drawable-hdpi240 dpi1.5×72 px
drawable-xhdpi320 dpi2×96 px
drawable-xxhdpi480 dpi3×144 px
drawable-xxxhdpi640 dpi4×192 px

Icon sizes for every density

Android's nominal icon sizes are defined in dp, so the pixel size follows directly from the bucket scale factor.

Launcher icon (48 dp base)

Folder48 dp × scaleExport at
drawable-ldpi48 × 0.7536 × 36 px
drawable-mdpi48 × 148 × 48 px
drawable-hdpi48 × 1.572 × 72 px
drawable-xhdpi48 × 296 × 96 px
drawable-xxhdpi48 × 3144 × 144 px
drawable-xxxhdpi48 × 4192 × 192 px

dp to px reference table

The same dp value rendered at every density. Useful when you are reading a design spec instead of a pixel value.

dpldpimdpihdpixhdpixxhdpixxxhdpi
1112234
2223468
434681216
86812162432
16121624324864
24182436487296
322432486496128
4836487296144192
64486496128192256
967296144192288384
12896128192256384512
160120160240320480640
240180240360480720960
3202403204806409601280

Which folder does my density use?

Nearest bucket: xxhdpi (480 dpi, 3×) → drawable-xxhdpi

A device can report a non-standard density such as 420 or 440 dpi and still read resources from the nearest standard folder. Run adb shell wm density to see the value yours reports.

The scale factors, and why they are ratios

Every bucket is defined relative to mdpi, which is the baseline at 160 dpi and 1×. The rest follow by dividing by 160: hdpi is 240/160 = 1.5×, xhdpi is 2×, xxhdpi is 3× and xxxhdpi is 4×. That is the whole conversion table. A 24 px mdpi asset becomes 36 px on hdpi, 48 on xhdpi, 72 on xxhdpi and 96 on xxxhdpi — multiply the mdpi number by the target scale and you are done.

ldpi is the one awkward entry: at 120 dpi the scale is 0.75, so assets shrink rather than grow. In practice nothing ships ldpi bitmaps any more, because the platform has not supported a 120 dpi device in years and the resource system will happily downscale mdpi for anything that asks for it. If you are exporting by hand, ldpi is the folder you can safely leave out.

Rounding that ruins your assets

The scale factors are not all integers, so converting upward and back down does not always return the number you started with. Going mdpi → hdpi halves into thirds: a 25 px asset becomes 37.5 px and the build system rounds it. Coming back, 38 px hdpi is 25.33 dp, which rounds to 25 again — harmless. Do that twice with odd sizes and you drift. Always export from the largest source you have and scale down, never up, for anything where a one pixel difference is visible.

Adaptive icons change the numbers

The 48 dp launcher icon table above is the legacy shape. Adaptive icons introduced in Android 8 use a 108 dp canvas with only the central 72 dp guaranteed to be visible, because launchers crop and animate the edges for their own mask. That means the foreground layer is exported at 108 dp (162 px at xxhdpi, 432 px at xxxhdpi), not at the 48 dp figure, and the artwork must survive the crop. If you are shipping adaptive icons, size the foreground from 108 dp and keep important detail inside the inner two thirds.

Densities that are not buckets

Most modern Android phones do not report one of the six bucket values. A Pixel 5 reports 440 dpi; a Galaxy A54 reports 450; many ROMs with a display-size slider report values like 411 or 434. None of these are buckets, and none of them get their own drawable folder. The system picks the nearest bucket for resource selection while using the exact value for px-to-dp math — which is why a 440 dpi phone still reads drawable-xxhdpi but lays out in slightly fewer dp than a 480 dpi phone of the same resolution.

If you are checking your own device, adb shell wm density prints the reported value and adb shell wm density reset restores the manufacturer default. Our dp ↔ px converter takes any density, not just the six buckets, and our density bucket guide explains how the lookup is performed.

Frequently asked

How do I convert mdpi hdpi xhdpi xxhdpi sizes?

Work from the scale factors, not the pixel values: mdpi is 1×, hdpi 1.5×, xhdpi 2×, xxhdpi 3× and xxxhdpi 4×. To move an asset from mdpi to xxhdpi, multiply by 3 (48 px becomes 144 px). To move it back, divide by 3. Converting between two non-mdpi folders means dividing by the source scale and multiplying by the target scale, which is what the converter above does in one step.

What is the difference between dpi and a density bucket?

dpi is the value the system reports, and it can be any integer — a Pixel 5 reports 440, a Galaxy A54 reports 450. A density bucket is the coarse step the resource system snaps that value to: 120, 160, 240, 320, 480 or 640. Two phones at 420 and 440 dpi both read from drawable-xxhdpi, so the bucket is what decides which asset file loads.

What pixel size should a launcher icon be?

The launcher icon is specified as 48 dp, so its exported pixel size follows the scale factor: 36 px at ldpi, 48 at mdpi, 72 at hdpi, 96 at xhdpi, 144 at xxhdpi and 192 at xxxhdpi. Adaptive icons work on a 108 dp canvas instead, with the inner 72 dp guaranteed visible, which is why the exported foreground files are larger than the legacy numbers above.

Do I still need every drawable folder in 2026?

For vector drawables, no — a single drawable with vectors scales to any density. You still need the bitmap folders for photographic assets, textures and anything the vector pipeline cannot express, and Play Store screenshots and store listings have their own separate size rules. Shipping all six folders for a bitmap asset is still the safest default.