1

I understand that android choices drawables based on their location (-ldpi, -mdpi and so on). How should I organize my images, if I have two sets of drawables, one for mdpi and ldpi and another for hdpi and xhdpi?

TpoM6oH
  • 8,385
  • 3
  • 40
  • 72
  • have you tried putting one set on the mdpi and another on the hdpi? – renam.antunes Jan 12 '13 at 20:43
  • @renam.antunes: That won't work. If a device is xhdpi and no drawable is found in the `/drawable-xhdpi` folder, Android will search in the default `/drawable` folder and _not_ in the next-lower-dpi folder: "If no matching resource is available, the system uses the default resource and scales it up or down as needed to match the current screen size and density" from [here](http://developer.android.com/guide/practices/screens_support.html#support) – saschoar Jan 13 '13 at 09:25

1 Answers1

0

For now, I didn't come across any possibility to group dpi folders. But you still got choices:

Dummy drawable:

Put your images into your normal /drawable folder and name them like image1_low.png and image1_high.png. Now put a "dummy drawable" file image1_dummy.xml into your /drawable-ldpi and /drawable-mdpi folders, containing something like this:

<?xml version="1.0" encoding="utf-8"?>
<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:src="@drawable/image1_low" />

The same goes for the /drawable-hdpi and /drawable-xhdpi folders, but now with @drawable/image1_high instead of @drawable/image1_low.

Now you can refer to the name of the dummy, e.g. by

getResources().getDrawable(R.drawable.image1_dummy);

in your code to get the desired drawable.

Programmatical:

You're not restricted to using folders, there is also a programmatical approach (credits to https://stackoverflow.com/a/5323437/1140682):

DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
switch(metrics.densityDpi){
   case DisplayMetrics.DENSITY_XHIGH:
         // assign your high-res version
         break;
   case DisplayMetrics.DENSITY_HIGH:
         // assign your high-res version
         break;
   default:
         // assign your low-res version
         break;
}
Community
  • 1
  • 1
saschoar
  • 8,150
  • 5
  • 43
  • 46