这是一个场景。有文件夹:
图像(通常是背景,但不仅限于此类图像)仅位于/res/drawable
。
我在Galaxy S3上测试应用程序并正确显示背景。我在HTC One X上测试并且没有显示背景图像。
如果我将图像从/res/drawable
复制到/res/drawable-xhdpi
,则One X将显示图像。
从逻辑上思考,不应该发生,对吧?!如果drawable-xhdpi
中没有图片,那么Android应该将其查看到其他文件夹中,直到它达到默认值/res/drawable
并且它应该从那里拉出来。
为什么有些手机没有发生这种情况?
PS。我注意到一些平板电脑存在同样的问题,但我现在不记得哪些平板电脑了。
PPS。我在这里提到了背景图片,但问题并没有受到约束。它也与其他图像一起发生。我知道xhdpi手机有大图像的问题,我不希望你认为问题是背景图像太大。它也会出现在“正常”大小的其他图像中。
答案 0 :(得分:9)
为什么要将图像文件放入drawable文件夹?
根据我通过互联网阅读的提示,您不应该将图像文件放在可绘制的文件夹中。
在drawable文件夹中,你只放了xml类型的drawables。
如果要放置图像文件,请将其放入以下任何文件夹中(或为其添加其他限定符,或使用其他限定符):
放入drawable文件夹的图像被视为默认值,即mdpi。因此,如果要将文件保留在相同的屏幕密度类别中,请将其放入drawable-mdpi文件夹中。
不将图像放入可绘制文件夹的另一个原因是android会自动将文件转换为16位图像,用于某些设备(如三星Galaxy s),这会使图像在某些情况下看起来很糟糕。
这是一个解释this issue的链接。
答案 1 :(得分:3)
我制作了一个带有drawable的项目,该项目只在“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
密度等级,所以请记住,如果从那里使用,任何文件夹中的可绘制文件都会自动放大。