Android drawables - use xhdpi for hdpi
Asked Answered
S

4

2

Last two questions stayed unanswered, I hope "third one's the charm" works :)

I want application that is HDPI use those drawables in folder "drawable-xhdpi" and LDPI devices those in "drawable-mdpi". So I don't have to duplicate same images. Is this possible?

Spontoon answered 22/12, 2012 at 16:3 Comment(0)
P
8

Yes, Android scales drawables, selecting the drawable that will produce the best result. But not all scaling combinations work that well. Downscaling to MDPI can produce noticeably poor results. XHDPI to HDPI generally produces pretty good results. But given that the overwhelming majority of devices these days are HDPI, it's probably worthwhile to have HDPI resources. HDPI to XHDPI scaling is not terrible. Some 1280x720 devices uses XHDPI resource. These generally look ok. Google TV uses XHDPI as well. On a huge screen, scaling errors are visible.

LDPI devices are -- for all practical purposes -- non-existent now.

True that generating scaled resources is an enormous PITA. But, in my opinion, you really need to do MDPI and HDPI. And once you've got that unpleasant workflow down, it doesn't require a lot of extra work to generate XHDPI. For what it's worth, if your artwork is in vector format, the vast majority of resources don't need tweaking for specific resolutions. There doesn't seem to be any compelling need to pixel-align edges of square objects, for example. Usually it's only interior features in complex icons and artwork that benefit from some amount of pixel-pushing.

It's pretty clear that XHDPI is going to be come more and more common. Trust me, you don't want to go back and re-do all your artwork in XHDPI after the fact. My advice: if you intend to still be shipping your app a year from now, suck it up, and do the nasty as you go, while it's still relatively easy.

Philhellene answered 22/12, 2012 at 16:54 Comment(0)
F
5

In my experience, if you place an image in just some of the drawable folders, but not all, the OS will choose the "best" image for the device that you are using, even if it is not exactly the perfect fit. For example, if you put an image called arrow.png ONLY in the drawable-hdpi folder, all devices will use that image for the arrow drawable, and scale it down or up appropriately, stretching or shrinking the image.

That being said, you should be able to accomplish what you want by simply putting your image in the right folders and allowing the devices to choose the correct one. For example, if you were trying to accomplish your task with only one image, arrow.png:

drawable-xhdpi/ -> arrow.png

drawable-hdpi/ -> empty

drawable-mdpi/ -> arrow.png

drawable-ldpi/ -> empty

drawable/ -> empty

If you use the app on an ldpi device, the device will use the mdpi image, as you wanted, because it is closest to the correct resolution. On the hdpi phone, it will use the xhdpi image, because it is again the closest to the correct resolution.

Forb answered 22/12, 2012 at 16:11 Comment(0)
A
3

Yes. Android automatically downscales/upscales resources that it cannot find. If you were to only put resources in the XHDPI folder it would just work, Android would take care of resizing them to work in all the other densities.

Arabela answered 22/12, 2012 at 16:11 Comment(1)
yes this should work, but be aware of memory issue, and sometimes when you downscales XHDPI to MDPI or LDPI the image get distorted.Kinross
L
-1

We should add this code in MainActivity class and copy image to dhpi folder with ic_launcher, ic_launcher2, ic_launcher3 and ic_1 is image name, we can change size: width and height

int array_image[]={R.drawable.ic_launcher,
    R.drawable.ic_launcher2,
    R.drawable.ic_launcher3,
    R.drawable.ic_1

}

Logogram answered 14/8, 2014 at 3:15 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.