Android可绘制资源问题

时间:2013-07-12 10:19:15

标签: android eclipse android-resources android-drawable

我注意到真实设备从预览中的eclipse中获取了不同的资源。 例如,我为最小宽度为720dp的设备创建了可绘制资源

  • 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-hdpidrawable-sw320dp-xhdpi索尼爱立信xperia-ARC 854x480 hdpi 会选择drawable-sw320dp-xhdpi

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

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

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

在我的情况下,例如,具有xlarge屏幕(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);
}

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

答案 1 :(得分: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)

和drawables,

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