资源不是Drawable

时间:2015-03-07 14:06:08

标签: java android android-layout

此代码导致仿真器(API 18)上的强制关闭异常,并在华硕Nexus 7(API 21)中运行

<View
    android:layout_width="400dp"
    android:layout_height="2dp"
    android:layout_marginTop="30dp"
    android:background="@color/light_gray" />

如果我用@color/light_gray取代#EBEBEB,则可以在两台设备上完美地工作。

例外是

Caused by: android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x1/d=0x7f080060 a=-1 r=0x7f080060}

所以我开始使用下面的代码,

<Button
    android:layout_width="wrap_content"
    android:layout_marginTop="30dp"
    android:layout_height="wrap_content"
    android:ems="10"
    android:background="@drawable/login_btn_selector"
    android:text="Login"
    android:id="@+id/btnLogin" />

这个抛出异常,

 Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi-v4/login_btn_selected.xml from drawable resource ID #0x7f020095

所以我尝试将login_btn_selected.xml放在res/drawable-hdpi-v4/文件夹中,然后它说res/drawable-hdpi/res/drawable-hdpi-v4/之间出现了重复文件,所以我将其从{{1}中删除了,然后再次在v4文件夹中找到相同的资源异常,

res/drawable-hdpi/

所以最后我来到SO

问题是,

  1. 我想知道这个问题只在模拟器中或在真实设备中。
  2. 如果在真实设备中也意味着我该如何克服这个问题?

    我想使用Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi-v4/login_btn_selected.xml from drawable resource ID #0x7f020095 而不是硬编码,我也想使用drawable选择器。

  3. 注意:我删除并重新创建了模拟器,没有用。我也在API 19模拟器上测试了同样的问题。

    任何解决方案都会非常明显。

5 个答案:

答案 0 :(得分:11)

这是因为我的颜色资源文件位于\res\values-21文件夹下,现在将其移动到\res\values\文件夹,现在应用程序工作正常。谢谢各位朋友。

答案 1 :(得分:3)

另外,请确保您没有将imageView的背景设置为selectableItemBackgroundBorderless,否则旧设备会出现此错误:

<ImageView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:background="?android:selectableItemBackgroundBorderless" />

答案 2 :(得分:1)

我在最近的应用程序中遇到了同样的问题。在我的情况下,问题是我把一个图像放在名为drawable-v21的文件夹中,这在旧的Android API中是不可用的。

解决方案是将你的drawable放在drawable -... dpi文件夹中。

答案 3 :(得分:0)

您的色彩资源必须位于Android资源文件中(即:colors.xml文件中) Android不会抱怨 你设置它,但必须被定义为颜色资源

即:

<color name="light_gray">#ebebeb</color>

<强> [编辑]

名称似乎不匹配...
见这一行:

android:background="@drawable/login_btn_selector"

然后你说:So I tried to place the login_btn_selected.xml

似乎是

的原因
Caused by: android.content.res.Resources$NotFoundException: File res/drawable-hdpi-v4/login_btn_selected.xml from drawable resource ID #0x7f020095.

答案 4 :(得分:-1)

我认为最好的方法是,首先在&#34; drawable&#34;内创建一个xml文件。文件夹并执行以下操作。

e.g。 light_gray.xml然后执行类似下面的操作。

<?xml version="1.0" encoding="utf-8"?>
    <shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
        <solid android:color="@color/light_gray" />
    </shape>

保存后。

更改您的代码,如下所示。

<View
    android:layout_width="400dp"
    android:layout_height="2dp"
    android:layout_marginTop="30dp"
    android:background="@ drawable/light_gray" />

但请务必将文件light_gray.xml仅放到&#34; drawable&#34;夹。不要将相同的文件放到&#34; drawable-hdpi或drawable-hdpi-v4等等#34;