diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/PixelDensityQualifier.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/PixelDensityQualifier.java
index d67d4ae..0ba2aac 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/PixelDensityQualifier.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/configurations/PixelDensityQualifier.java
@@ -17,6 +17,7 @@
 package com.android.ide.eclipse.adt.internal.resources.configurations;
 
 import com.android.ide.eclipse.adt.internal.editors.IconFactory;
+import com.android.layoutlib.api.IDensityBasedResourceValue;
 import com.android.sdklib.AndroidVersion;
 import com.android.sdklib.IAndroidTarget;
 
@@ -39,19 +40,22 @@
      * Screen Orientation enum.
      */
     public static enum Density {
-        HIGH("hdpi", 240, "High Density"), //$NON-NLS-1$
-        MEDIUM("mdpi", 160, "Medium Density"), //$NON-NLS-1$
-        LOW("ldpi", 120, "Low Density"), //$NON-NLS-1$
-        NODPI("nodpi", -1, "No Density"); //$NON-NLS-1$
+        HIGH("hdpi", 240, "High Density", IDensityBasedResourceValue.Density.HIGH), //$NON-NLS-1$
+        MEDIUM("mdpi", 160, "Medium Density", IDensityBasedResourceValue.Density.MEDIUM), //$NON-NLS-1$
+        LOW("ldpi", 120, "Low Density", IDensityBasedResourceValue.Density.LOW), //$NON-NLS-1$
+        NODPI("nodpi", -1, "No Density", IDensityBasedResourceValue.Density.NODPI); //$NON-NLS-1$
 
         private final String mValue;
         private final String mDisplayValue;
         private final int mDpiValue;
+        private final IDensityBasedResourceValue.Density mDensity;
 
-        private Density(String value, int dpiValue, String displayValue) {
+        private Density(String value, int dpiValue, String displayValue,
+                IDensityBasedResourceValue.Density density) {
             mValue = value;
             mDpiValue = dpiValue;
             mDisplayValue = displayValue;
+            mDensity = density;
         }
 
         /**
@@ -109,6 +113,14 @@
             return mDisplayValue;
         }
 
+        /**
+         * Returns the {@link com.android.layoutlib.api.IDensityBasedResourceValue.Density} value
+         * associated to this {@link Density}.
+         */
+        public IDensityBasedResourceValue.Density getDensity() {
+            return mDensity;
+        }
+
         public static int getIndex(Density value) {
             int i = 0;
             for (Density input : values()) {
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java
index 7528441..2d2749d 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/MultiResourceFile.java
@@ -45,7 +45,7 @@
 public final class MultiResourceFile extends ResourceFile implements IValueResourceRepository {
 
     private final static SAXParserFactory sParserFactory = SAXParserFactory.newInstance();
-    
+
     private final HashMap<ResourceType, HashMap<String, ResourceValue>> mResourceItems =
         new HashMap<ResourceType, HashMap<String, ResourceValue>>();
 
@@ -58,7 +58,7 @@
         update();
 
         Set<ResourceType> keys = mResourceItems.keySet();
-        
+
         return keys.toArray(new ResourceType[keys.size()]);
     }
 
@@ -69,21 +69,21 @@
         HashMap<String, ResourceValue> list = mResourceItems.get(type);
         return (list != null && list.size() > 0);
     }
-    
+
     @Override
     public Collection<ProjectResourceItem> getResources(ResourceType type,
             ProjectResources projectResources) {
         update();
 
         HashMap<String, ResourceValue> list = mResourceItems.get(type);
-        
+
         ArrayList<ProjectResourceItem> items = new ArrayList<ProjectResourceItem>();
-        
+
         if (list != null) {
             Collection<ResourceValue> values = list.values();
             for (ResourceValue res : values) {
                 ProjectResourceItem item = projectResources.findResourceItem(type, res.getName());
-                
+
                 if (item == null) {
                     if (type == ResourceType.ID) {
                         item = new IdResourceItem(res.getName(), false /* isDeclaredInline */);
@@ -99,7 +99,7 @@
 
         return items;
     }
-    
+
     /**
      * Updates the Resource items if necessary.
      */
@@ -110,7 +110,7 @@
 
             // need to parse the file and find the content.
             parseFile();
-            
+
             resetTouch();
         }
     }
@@ -128,7 +128,7 @@
         } catch (CoreException e) {
         }
     }
-    
+
     /**
      * Adds a resource item to the list
      * @param resType The type of the resource
@@ -138,7 +138,7 @@
         ResourceType type = ResourceType.getEnum(resType);
         if (type != null) {
             HashMap<String, ResourceValue> list = mResourceItems.get(type);
-    
+
             // if the list does not exist, create it.
             if (list == null) {
                 list = new HashMap<String, ResourceValue>();
@@ -146,13 +146,13 @@
             } else {
                 // look for a possible value already existing.
                 ResourceValue oldValue = list.get(value.getName());
-                
+
                 if (oldValue != null) {
                     oldValue.replaceWith(value);
                     return;
                 }
             }
-            
+
             // empty list or no match found? add the given resource
             list.put(value.getName(), value);
         }
@@ -168,7 +168,7 @@
         if (list != null) {
             return list.get(name);
         }
-        
+
         return null;
     }
 }
diff --git a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/SingleResourceFile.java b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/SingleResourceFile.java
index 51bd793..8900500 100644
--- a/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/SingleResourceFile.java
+++ b/tools/eclipse/plugins/com.android.ide.eclipse.adt/src/com/android/ide/eclipse/adt/internal/resources/manager/SingleResourceFile.java
@@ -17,8 +17,10 @@
 package com.android.ide.eclipse.adt.internal.resources.manager;
 
 import com.android.ide.eclipse.adt.internal.resources.ResourceType;
+import com.android.ide.eclipse.adt.internal.resources.configurations.PixelDensityQualifier;
 import com.android.ide.eclipse.adt.internal.resources.manager.files.IAbstractFile;
 import com.android.layoutlib.api.IResourceValue;
+import com.android.layoutlib.utils.DensityBasedResourceValue;
 import com.android.layoutlib.utils.ResourceValue;
 
 import java.util.ArrayList;
@@ -40,24 +42,24 @@
     static {
         sParserFactory.setNamespaceAware(true);
     }
-    
+
     private final static Pattern sXmlPattern = Pattern.compile("^(.+)\\.xml", //$NON-NLS-1$
             Pattern.CASE_INSENSITIVE);
-    
+
     private final static Pattern[] sDrawablePattern = new Pattern[] {
         Pattern.compile("^(.+)\\.9\\.png", Pattern.CASE_INSENSITIVE), //$NON-NLS-1$
         Pattern.compile("^(.+)\\.png", Pattern.CASE_INSENSITIVE), //$NON-NLS-1$
         Pattern.compile("^(.+)\\.jpg", Pattern.CASE_INSENSITIVE), //$NON-NLS-1$
         Pattern.compile("^(.+)\\.gif", Pattern.CASE_INSENSITIVE), //$NON-NLS-1$
     };
-    
+
     private String mResourceName;
     private ResourceType mType;
     private IResourceValue mValue;
 
     public SingleResourceFile(IAbstractFile file, ResourceFolder folder) {
         super(file, folder);
-        
+
         // we need to infer the type of the resource from the folder type.
         // This is easy since this is a single Resource file.
         ResourceType[] types = FolderTypeRelationship.getRelatedResourceTypes(folder.getType());
@@ -65,9 +67,17 @@
 
         // compute the resource name
         mResourceName = getResourceName(mType);
-        
-        mValue = new ResourceValue(mType.getName(), getResourceName(mType), file.getOsLocation(),
-                isFramework());
+
+        // test if there's a density qualifier associated with the resource
+        PixelDensityQualifier qualifier = folder.getConfiguration().getPixelDensityQualifier();
+
+        if (qualifier == null) {
+            mValue = new ResourceValue(mType.getName(), getResourceName(mType),
+                    file.getOsLocation(), isFramework());
+        } else {
+            mValue = new DensityBasedResourceValue(mType.getName(), getResourceName(mType),
+                    file.getOsLocation(), qualifier.getValue().getDensity(), isFramework());
+        }
     }
 
     @Override
@@ -83,27 +93,27 @@
     @Override
     public Collection<ProjectResourceItem> getResources(ResourceType type,
             ProjectResources projectResources) {
-        
+
         // looking for an existing ResourceItem with this name and type
         ProjectResourceItem item = projectResources.findResourceItem(type, mResourceName);
-        
+
         ArrayList<ProjectResourceItem> items = new ArrayList<ProjectResourceItem>();
 
         if (item == null) {
             item = new ConfigurableResourceItem(mResourceName);
             items.add(item);
         }
-        
+
         // add this ResourceFile to the ResourceItem
         item.add(this);
-        
+
         return items;
     }
 
     /*
      * (non-Javadoc)
      * @see com.android.ide.eclipse.editors.resources.manager.ResourceFile#getValue(com.android.ide.eclipse.common.resources.ResourceType, java.lang.String)
-     * 
+     *
      * This particular implementation does not care about the type or name since a
      * SingleResourceFile represents a file generating only one resource.
      * The value returned is the full absolute path of the file in OS form.
@@ -112,14 +122,14 @@
     public IResourceValue getValue(ResourceType type, String name) {
         return mValue;
     }
-    
+
     /**
      * Returns the name of the resources.
      */
     private String getResourceName(ResourceType type) {
         // get the name from the filename.
         String name = getFile().getName();
-        
+
         if (type == ResourceType.ANIM || type == ResourceType.LAYOUT || type == ResourceType.MENU ||
                 type == ResourceType.COLOR || type == ResourceType.XML) {
             Matcher m = sXmlPattern.matcher(name);
@@ -133,7 +143,7 @@
                     return m.group(1);
                 }
             }
-            
+
             // also try the Xml pattern for selector/shape based drawable.
             Matcher m = sXmlPattern.matcher(name);
             if (m.matches()) {
diff --git a/tools/layoutlib_utils/src/com/android/layoutlib/utils/DensityBasedResourceValue.java b/tools/layoutlib_utils/src/com/android/layoutlib/utils/DensityBasedResourceValue.java
new file mode 100644
index 0000000..59de463
--- /dev/null
+++ b/tools/layoutlib_utils/src/com/android/layoutlib/utils/DensityBasedResourceValue.java
@@ -0,0 +1,34 @@
+/*
+ * Copyright (C) 2008 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.layoutlib.utils;
+
+import com.android.layoutlib.api.IDensityBasedResourceValue;
+
+public class DensityBasedResourceValue extends ResourceValue implements IDensityBasedResourceValue {
+
+    private Density mDensity;
+
+    public DensityBasedResourceValue(String type, String name, String value, Density density,
+            boolean isFramework) {
+        super(type, name, value, isFramework);
+        mDensity = density;
+    }
+
+    public Density getDensity() {
+        return mDensity;
+    }
+}
