资源未找到异常:资源不是可绘制项(颜色或路径)?

54

我有一个TextView,当它被点击时,我会在对话框内填充一个ListView。这段代码以前一直能正常工作,但今天却抛出了异常。

以下是我的代码:

tvSelectedFont = (TextView)findViewById(R.id.lblQuoteSelectedFont);
    tvSelectedFont.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            ListView listView = new ListView(context);
            listView.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1,
                    new String[] {"Default", "Serif", "Monospace"}));
            final Dialog dialog = new Dialog(context);
            dialog.setContentView(listView);
            dialog.setTitle(R.string.txt_settings_QuotefontName);

            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    String selectedTypeFace = ((TextView)view).getText().toString();
                    tvSelectedFont.setText(selectedTypeFace);
                    switch(selectedTypeFace)
                    {
                        case "Serif":
                            selectedQuoteTypeFace = Typeface.SERIF;
                            break;
                        case "Monospace":
                            selectedQuoteTypeFace = Typeface.MONOSPACE;
                            break;
                        default:
                            selectedQuoteTypeFace = Typeface.DEFAULT;
                            break;
                    }
                    tvQuoteTextSample.setTypeface(selectedQuoteTypeFace, selectedQuoteFontStyle);
                    dialog.dismiss();
                }
            });

            dialog.show();
        }
    });

日志记录错误显示如下:

Device driver API version: 29
User space API version: 29
03-17 14:33:24.701  23220-23220/com.example.manas.dailyquoteswidget E/﹕ mali: REVISION=Linux-r3p2-01rel3 BUILD_DATE=Tue Jul 22 19:59:34 KST 2014
03-17 14:33:27.926  23220-23220/com.example.manas.dailyquoteswidget E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.example.manas.dailyquoteswidget, PID: 23220
android.content.res.Resources$NotFoundException: Resource is not a Drawable (color or path): TypedValue{t=0x2/d=0x7f0100a7 a=3}
        at android.content.res.Resources.loadDrawable(Resources.java:3415)
        at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
        at android.widget.AbsListView.<init>(AbsListView.java:1089)
        at android.widget.ListView.<init>(ListView.java:152)
        at android.widget.ListView.<init>(ListView.java:148)
        at android.widget.ListView.<init>(ListView.java:144)
        at com.example.manas.dailyquoteswidget.DailyQuotesWidgetConfigureActivity$6.onClick(DailyQuotesWidgetConfigureActivity.java:182)
        at android.view.View.performClick(View.java:4640)
        at android.view.View$PerformClick.run(View.java:19425)
        at android.os.Handler.handleCallback(Handler.java:733)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:146)
        at android.app.ActivityThread.main(ActivityThread.java:5593)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
        at dalvik.system.NativeStart.main(Native Method)

无法解决问题。请帮忙吗?

那是 DailyQuotesWidgetConfigureActivity.java 的第 182 行吗? - Blackbelt
嗨,第182行是这样的:ListView listView = new ListView(context); listView.setAdapter(new ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, new String[] {"默认", "衬线体", "等宽字体"})); - Bluemarble
@BuggyCoder:请尝试使用dialog.setTitle(v.getContext().getResources().getString(R.string.txt_settings_QuotefontName))代替dialog.setTitle(R.string.txt_settings_QuotefontName) - ρяσѕρєя K
1
当我升级使用compile'com.android.support:appcompat-v7:23.4.0'时,我遇到了这个问题,如果我保留v7:22.2.0',它就能正常工作。 - tread
12个回答

197

我最近制作的应用程序遇到了这个问题。在我的情况下,问题是我将图片放在名为drawable-v21的文件夹中,在旧版Android API中不可用。

解决方案是将可绘制对象放在drawable-...dpi文件夹中。


4
谢谢!一个解决重大问题的非常简单的解决方案。 - Pedro Varela
1
@codingpuss。我的最小SDK是Android 5.0。我不需要做你提到的那些事情,对吧?但是我仍然在一些运行Android 5.1的设备上遇到崩溃问题。 - zulkarnain shah
1
你把图形文件放在所有的drawable文件夹里了吗? - Dũng Trần Trung
不错的答案,但我应该补充这些额外的信息。例如,要访问drawable-v24,您应该将Android Studio文件视图更改为项目级别,以便在res文件夹中找到drawable-v24。然后将其中的所有drawble移动到drawble文件夹中。 - Reza
为什么Android Studio会自己做这样危险的事情?!! - doctorram
显示剩余2条评论

57

在Android Studio中将工程层次结构更改为项目文件。

然后进入res文件夹,您会看到多个可绘制的文件夹。将图像复制到适当的文件夹(drawable)中或根据API级别进行选择。

在我的情况下,图像位于drawable-24文件夹中,因此它在api<24设备上不可用。

屏幕截图。


5
如果我能给你买啤酒,我会给你买一箱。我花了几个小时在这上面,而你的修复正是问题所在。谢谢。 - DJFriar
3
应该将这个标记为问题的正确答案。谢谢。 - Alvaro
1
谢谢。我一直在想为什么我的应用程序在我的常规测试设备(LG G3,运行api 28)上运行良好,但在我的手机的api 23上却不行,正如你所指出的那样,它小于24。我收到的实际错误是“Error inflating class "androidx.appcompat.widget.Toolbar"”,这使得看起来androix不受支持。 - ShayR

14
在Mac的Finder中,我只需将文件夹../drawable/drawable-24中的所有文件移动到/drawable中,这样就可以在旧版Android和Oreo上正常工作。另外,在将图像复制粘贴到Android Studio时,请确保将它们粘贴到drawable而不是drawable//drawable-24中,后者可能是默认设置。

4
我将所有位于/drawable-24 文件夹中的内容移动到了/drawable 文件夹中。成功了! - Josh

10

我找到解决方法了,问题不在代码上,而是主题。我最近将主题从android:theme="@style/AppTheme"更改为android:theme="@style/Theme.AppCompat.NoActionBar"后,问题就出现了。我又回滚到旧的AppTheme主题,它又恢复正常运行了。看来NoActionBar主题不兼容对话框。


2

我在另一种情况下遇到了这个错误,结果发现我无意中将一个drawable设置为了R.id.something,而不是R.drawable.something


谢谢您,我在XML中设置了一个可绘制对象为@id/something,这就是导致崩溃的原因! - Lucas P.
@Sam。我的最低SDK是Android 5.0。我不需要做你提到的那些事情,对吗?但是我仍然在一些运行Android 5.1的设备上遇到崩溃问题。 - zulkarnain shah
@zulkarnainshah,就我所记得的,我曾经不小心尝试将一个id用作drawable,因此错误信息(“资源不是Drawable”)在我的情况下非常准确。这可能适用于任何Android版本,因为ids不是drawables。 - Sam

2
请确保已经尝试了上述解决方案,如果它们都无法解决您的问题,请尝试以下方法。
在我的情况下,问题是由于图标只有hdpi分辨率造成的。请将这些图标更改到包含xhdpi,mdpi,xxhdpi和xxxhdpi分辨率的文件夹中。
这样就可以解决我的问题了。
附注:
我通过安装"Android drawable importer"插件将图标转换为不同的图像分辨率。

0

可能您的视图背景资源不在drawable目录中,而是在颜色中。视图背景不支持颜色资源

视图背景如下所示

    <?xml version="1.0" encoding="utf-8"?>
    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:state_selected="true">
            <shape>
                <solid android:color="#ffffffff"/>
            </shape>
        </item>
        <item android:state_selected="false">
            <shape>
                <solid android:color="#00000000"/>
            </shape>
        </item>
    </selector>

0

你可以确保你的drawable.xml未包含(v24),以使其正常工作。


0

drawable文件夹中包含多个文件夹(不可见),如果您遇到此类错误,请将出错的文件复制并粘贴到所有目录中,或者至少复制并粘贴到夜间和普通的drwable文件夹中。

在此输入图片描述


0

当您将图像放入drawable文件夹中时,默认情况下它们以-v24结尾。

如果您不确定,请再次将图像拖放到drawable文件夹中。确保名称不是以-v24结尾。

旧API的解决方案


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接