9

这是一个场景。有文件夹:

  • 可绘制的
  • 可绘制的 ldpi
  • 可绘制的 mdpi
  • 可绘制的 hdpi
  • drawble-xhdpi

图像(通常是背景,但不仅限于此类图像)仅位于其中/res/drawable

我在 Galaxy S3 上测试了该应用程序,并且背景显示正确。我在 HTC One X 上测试,但没有显示背景图像。

如果我将图像从 复制/res/drawable/res/drawable-xhdpi,One X 将显示图像。

从逻辑上思考,这不应该发生,对吧?!如果 中没有图像drawable-xhdpi,那么 Android 应该查看其他文件夹,直到它到达默认文件夹,然后/res/drawable从那里拉取它。

为什么在某些手机上没有发生这种情况?

PS。我注意到一些平板电脑也存在同样的问题,但我现在不记得是哪些了。

聚苯乙烯。我在这里提到了背景图片,但问题不限于此。其他图像也会发生这种情况。我知道 xhdpi 手机存在大图像问题,我不希望您认为问题在于背景图像太大。其他“正常”大小的图像也会发生这种情况。

4

2 回答 2

9

为什么要将图像文件放入可绘制文件夹中?

根据我在互联网上阅读的提示,您不应该将图像文件放在可绘制文件夹中。

在可绘制文件夹中,您只放置了 xml 类型的可绘制对象。

如果要放置图像文件,请将其放在以下任何文件夹中(或为它们添加额外的限定符,或使用其他限定符):

  • drawable-nodpi(仅适用于您不知道其大小的图像)
  • 可绘制的 ldpi
  • 可绘制的 mdpi
  • 可绘制的 hdpi
  • 可绘制的 xhdpi
  • 可绘制的 tvdpi

放入可绘制文件夹的图像被视为默认值,即 mdpi 。因此,如果您想将文件保持在相同的屏幕密度类别中,请将其放入 drawable-mdpi 文件夹中。

不将图像放入drawable文件夹的另一个原因是android会自动将文件转换为某些设备(如三星galaxy s)的16位图像,这会使图像在某些情况下看起来很糟糕。

这是一个解释此问题的链接。

于 2012-12-29T11:55:51.577 回答
3

我制作了一个仅在“res/drawable”文件夹中的可绘制项目,在我的 One X 上对其进行了测试,并确认显示了图像:
https ://github.com/lnanek/Misc/tree/master/TestOneXDrawableFolder

布局:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"  
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent"  
    android:layout_height="match_parent"  
    tools:context=".MainActivity">
    <ImageView  
        android:src="@drawable/drawableonly"  
        android:layout_width="wrap_content"  
        android:layout_height="wrap_content"  
        android:layout_centerHorizontal="true"  
        android:layout_centerVertical="true"  
        />
</RelativeLayout>

资源:

res  
res/drawable  
res/drawable/drawableonly.png  
res/drawable-hdpi  
res/drawable-hdpi/ic_launcher.png  
res/drawable-ldpi  
res/drawable-mdpi  
res/drawable-mdpi/ic_launcher.png  
res/drawable-xhdpi  
res/drawable-xhdpi/ic_launcher.png  
res/layout  
res/layout/activity_main.xml  
res/menu  
res/menu/activity_main.xml  
res/values  
res/values/strings.xml  
res/values/styles.xml  
res/values-v11  
res/values-v11/styles.xml  
res/values-v14  
res/values-v14/styles.xml  

您可以尝试找出可能会触发其他行为的不同之处。请记住,有一个“drawable”文件夹和一个“ drawable-mdpi”文件夹有点奇怪,因为 drawable 文件夹mdpi默认是密度。这两个中的哪一个会被使用可能不是确定性的。我知道使用密度说明符确实会在现代构建工具中自动附加一个 -v4 来解决 Android 1.5 不理解这些说明符并正确处理它们的问题,因此drawable-mdpi-v4与可绘制相比,可能被认为具有更多说明符并优先匹配。mdpi无论如何,这两个文件夹都有一个密度类,所以请记住,如果从那里使用,来自任一文件夹的可绘制对象将自动放大。

于 2012-12-29T08:26:34.387 回答