【问题标题】:Android drawable resources issueAndroid可绘制资源问题
【发布时间】:2013-07-12 10:19:15
【问题描述】:

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

  • drawable-sw720dp-mdpi 适用于三星 Galaxy Tab 1280x800 mdpi
  • drawable-sw720dp-hdpi 适用于 Nexus 10 2560x1600 hdpi。

但是 Samsung Galaxy Tab 1280x800 mdpi 选择 drawable-sw720dp-hdpi 而不是 drawable-sw720dp-mdpi

其他设备也是如此。如果有资源drawable-sw320dp-hdpidrawable-sw320dp-xhdpiSony Ericsson xperia-ARC 854x480 hdpi 会选择drawable-sw320dp-xhdpi ?

我不能只保留drawable-hdpi 资源,因为有些设备的屏幕尺寸为 5'5 英寸。例如 samsung Galaxy 1280x720 hdpi 5'5 英寸,对于此类设备有不同的图形设计,因此设备 854x480 hdpi 和 1280x720 hdpi 将使用同一目录drawable-hdpi wich 是不可接受的。

有什么想法吗?

【问题讨论】:

  • 我尝试在一个示例项目中创建这些drawable文件夹,并在eclipse的图形布局中更改不同的设备,外观是正确的,设备选择了正确的drawable。
  • 是的,在 Eclipse 图形布局中选择了正确的可绘制对象。但真正的设备选择不同!我将带有文字“sw720dp-mdpi”的图片放入drawable-sw720dp-mdpi,另一张带有文字“sw720dp-hdpi”的图片放入drawable-sw720dp-hdpi。设备 10 英寸 1280x800 mdpi 向我展示了带有文本“sw720dp-hdpi”的图片,但 DisplayMetrics 返回给我的密度值为 160 (mdpi)。这让我很惊讶。
  • 2560*1600分辨率下drawable-sw720dp的720值如何计算?

标签: android eclipse android-resources android-drawable


【解决方案1】:

前段时间我在使用画布和位图编写动画壁纸时遇到了类似的问题。我无法使用默认布局文件夹实现我想要的。

例如,在我的例子中,具有 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);
}

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

【讨论】:

  • 感谢您的建议。我试试看。
【解决方案2】:

我也遇到了同样奇怪的问题。在我的情况下,Galaxy tab GT P7500 正在从 drawable-sw720dp-XXHDPI 文件夹中挑选图像,因为我也有 XXHDPI 文件夹。如果我删除了 XXHDPI,它会选择下一个较低的 XHDPI 文件夹。

问题在于可绘制文件夹的 swxxxdp 限定符。如果我删除屏幕宽度并只使用一组所有密度的图像,问题似乎就解决了。但是,我想为 7 英寸和 10 英寸设备提供不同的绘图集。我所做的是为 10 英寸图像和 7 英寸图像使用一组不同的名称,并使用 2 组不同的布局与 sw600dp 和 sw720dp 限定符。 这是我目前运作良好的结构。然而,这不是使用资源的预期方式,因为 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-09
    • 2015-04-29
    • 1970-01-01
    • 2020-07-20
    • 1970-01-01
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多