Skip to content Skip to sidebar Skip to footer

Relations Between Dip, Px And Dpi

If, in a layout xml file, I set the size to be, for example 12dip. Will that always be 12px in mdpi and so 18px in hdpi? So is dip always true for mdpi and will scale accordingly

Solution 1:

That question is fully covered by official documentation. Relations between dip, px and dpi are covered by this section.

Quote:

Density-independent pixel (dp)

A virtual pixel unit that applications can use in defining their UI, to express layout dimensions or position in a density-independent way.

The density-independent pixel is equivalent to one physical pixel on a 160 dpi screen, the baseline density assumed by the platform (as described later in this document). At run time, the platform transparently handles any scaling of the dp units needed, based on the actual density of the screen in use. The conversion of dp units to screen pixels is simple: pixels = dps * (density / 160). For example, on 240 dpi screen, 1 dp would equal 1.5 physical pixels. Using dp units to define your application's UI is highly recommended, as a way of ensuring proper display of your UI on different screens.

So the statement:

that always be 12px in mdpi and so 18px in hdpi

seems to be correct, according to the docs.

Solution 2:

12dp will be 12px on a device with density 160 dpi. The docs don't say that all mdpi devices have exactly 160 dpi so it seems you might find mdpi devices with other densities (e.g. 150 or 180 dpi). In those cases, the relation 1dp = 1px would not be true.

You can only be sure of this relation:

px = dp * (dpi / 160)

If a device has a density of 320 dpi then each dp corresponds to 2 px, because 320/160 is 2. I would say that 2 is the "density factor", but it is also what you get with getResources().getDisplayMetrics().density, so it is also called "density".

Post a Comment for "Relations Between Dip, Px And Dpi"