2013-07-12 66 views
4

我注意到,真正的设备从预览中显示的eclipse中显示不同的资源。 例如我创建绘图资源的设备与720dp的最小宽度为Android可绘制资源问题

  • drawable-sw720dp-mdpi为三星Galaxy Tab 1280x800的MDPI
  • drawable-sw720dp-hdpi于Nexus 10的2560x1600 HDPI。

三星Galaxy Tab为1280x800 MDPI拿起drawable-sw720dp-hdpi而不是drawable-sw720dp-mdpi

与其他设备相同的东西。如果有资源drawable-sw320dp-hdpi,drawable-sw320dp-xhdpi,索尼爱立信xperia-ARC 854x480 hdpi拿起drawable-sw320dp-xhdpi

我不能保留drawable-hdpi资源,因为有5英寸的屏幕尺寸的设备。例如三星galaxy 1280x720 hdpi 5'5英寸,并为这样的设备有不同的图形设计,所以设备854x480 hdpi和1280x720 hdpi将使用相同的目录drawable-hdpi wich是不可接受的。

任何想法?

+0

我试图创建一个示例项目,这些绘制的文件夹,并在日食的图形布局改变不同的设备,外观仅仅是正确的,设备选择合适的绘制。 – faylon

+1

在Eclipse图形布局中可以绘制右图。但真正的设备选择不同!我在drawable-sw720dp-mdpi中放置了带有文本“sw720dp-mdpi”的图片,而在drawable-sw720dp-hdpi中放置了另一个带有文本“sw720dp-hdpi”的图片。设备10英寸1280x800 mdpi向我显示带有文本“sw720dp-hdpi”的图片,但DisplayMetrics返回给我的密度值为160(mdpi)。这让我感到惊讶。 – vladyman

+0

如何计算2560 * 1600分辨率的drawable-sw720dp的720值? – Hanzo

回答

0

前段时间我有类似的问题,同时写了使用画布和位图的动画墙纸。我无法使用默认布局文件夹达到我想要的效果。

以我为例,具有xlarge screen(1280x800)的中等密度设备应该使用与正常屏幕(600x1024)的高密度相同的资源。

我决定编写自己的解决方案,将资源分为三组,并使用自定义规则选择它们。

DisplayMetrics metrics = resources.getDisplayMetrics(); 
int screenSize = resources.getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK; 

switch (metrics.densityDpi) { 
case DisplayMetrics.DENSITY_LOW: 
    if (screenSize == Configuration.SCREENLAYOUT_SIZE_SMALL || screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL) { 
     return new SmallResourceProvider(resources); 
    } 
case DisplayMetrics.DENSITY_MEDIUM: 
    if (screenSize == Configuration.SCREENLAYOUT_SIZE_NORMAL) { 
     return new MediumResourceProvider(resources); 
    } 
default: 
    return new LargeResourceProvider(resources); 
} 

也许这对您的情况会有帮助。

+0

谢谢你的想法。我会试试看。 – vladyman

+0

vladyman,它帮助你吗? – Evmorov

0

我也面临着同样的奇怪问题。在我的情况下,Galaxy选项卡GT P7500从drawable-sw720dp-XXHDPI文件夹中选取图像,因为我也有XXHDPI文件夹。如果我删除了XXHDPI,它将拾取下一个较低的XHDPI文件夹。

问题在于可绘制文件夹的swxxxdp限定符。如果我删除了屏幕宽度并只使用了一组所有密度的图像,问题似乎就解决了。不过,我想为7英寸和10英寸的设备设置不同的绘图。我所做的是为10英寸图像和7英寸图像使用一组不同的名称,并使用sw600dp和sw720dp限定符2种不同的布局。 这是我目前的结构,效果很好。但是,这并不是使用资源的预期方式,因为android建议使用externalizing the drawables。不幸的是我找不到更好的解决方案。

layout-land 
layout-sw600dp-land (uses image.png) 
layout-sw720dp-land (image_large.png) 

和绘图资源,

drawble-mdpi (image.png & image_large.png) 
drawable-hdpi 
drawable-xhdpi 
drawable-xxhdpi