为什么有些xhdpi手机只显示位于/ res / drawable中的图像?

时间:2012-12-28 13:16:23

标签: java android android-layout htc-android

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

  • 绘制
  • 抽拉-LDPI
  • 抽拉-MDPI
  • 抽拉-HDPI
  • draawble-xhdpi

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

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

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

从逻辑上思考,不应该发生,对吧?!如果drawable-xhdpi中没有图片,那么Android应该将其查看到其他文件夹中,直到它达到默认值/res/drawable并且它应该从那里拉出来。

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

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

PPS。我在这里提到了背景图片,但问题并没有受到约束。它也与其他图像一起发生。我知道xhdpi手机有大图像的问题,我不希望你认为问题是背景图像太大。它也会出现在“正常”大小的其他图像中。

2 个答案:

答案 0 :(得分:9)

为什么要将图像文件放入drawable文件夹?

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

在drawable文件夹中,你只放了xml类型的drawables。

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

  • drawable-nodpi(仅适用于您不知道其大小应该是什么的图像)
  • 抽拉-LDPI
  • 抽拉-MDPI
  • 抽拉-HDPI
  • 抽拉-xhdpi
  • 抽拉-tvdpi

放入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密度等级,所以请记住,如果从那里使用,任何文件夹中的可绘制文件都会自动放大。