Resources$NotFoundException:资源不是可绘制的(颜色或路径)?

Posted

技术标签:

【中文标题】Resources$NotFoundException:资源不是可绘制的(颜色或路径)?【英文标题】:Resources$NotFoundException: Resource is not a Drawable (color or path)? 【发布时间】:2021-01-06 02:41:47 【问题描述】:

我有一个 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();
        
    );

logcat 错误显示如下:

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): TypedValuet=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 吗? 嗨,第 182 行是这样的: ListView listView = new ListView(context); listView.setAdapter(new ArrayAdapter(context, android.R.layout.simple_list_item_1, new String[] "Default", "Serif", "Monospace")); @BuggyCoder:试试dialog.setTitle(v.getContext().getResources().getString(R.string.txt_settings_QuotefontName)),而不是dialog.setTitle(R.string.txt_settings_QuotefontName) 我在升级到使用compile 'com.android.support:appcompat-v7:23.4.0' 时遇到了这个问题,如果我继续使用v7:22.2.0',它会很有效 【参考方案1】:

我在最近制作的应用程序中遇到了这个问题。就我而言,问题是我将图像放在名为 drawable-v21 的文件夹中,这在较旧的 android API 中不可用。

解决方案是将您的drawable 也放入drawable-...dpi 文件夹中。

希望对您有所帮助。

【讨论】:

谢谢!!一个大问题的非常简单的解决方案。 @codingpuss。我的最小 SDK 是 Android 5.0。我不需要做你提到的事情,对吧?但我仍然在一些运行 Android 5.1 的设备上崩溃 你把图形文件放到所有drawable文件夹了吗? 从 8 降级到 5.1.1,这正是我所需要的 - 谢谢! 是的,我在 Android 7 的设备上遇到了同样的问题。对于更高版本的它工作正常。我将drawable放在所有dpi文件夹(hdpi、mdpi、xhdpi、xxhdpi、xxxhdpi)中,它对我有用【参考方案2】:

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

然后去res文件夹,你会看到多个drawable文件夹。将图像复制到适当的文件夹(可绘制)或基于 Api 级别。

在我的情况下,图像存在于 drawable-24 文件夹中,因此它在 api

【讨论】:

如果我能给你买啤酒,我会给你买一箱。我在这上面花了几个小时,而你的修复正是问题所在。谢谢。 这应该被标记为问题的正确答案。谢谢。 谢谢。我挠头想弄清楚为什么我的应用程序在我的常规测试设备(LG G3,运行 api 28)上运行良好,但在我手机的 api 23 上运行良好,正如你所指出的,它小于 24。实际我得到的错误是错误膨胀类“androidx.appcompat.widget.Toolbar”,这使它看起来像不支持android。【参考方案3】:

在 Mac 的 finder 中,我只是简单地将文件夹 ../drawable/drawable-24 中的所有文件移动到 /drawable 中,并且所有内容都适用于旧版 android 版本和 Oreo。此外,当您将图像复制并粘贴到 Android Studio 中时,请确保将它们粘贴到 drawable not drawable//drawable-24 中,这可能是默认设置。

【讨论】:

我将 /drawable-24 中的所有内容移至 /drawable。成功了!【参考方案4】:

我想通了,这不是代码的问题,而是主题的问题。问题开始后,我最近将主题从android:theme="@style/AppTheme"更改为android:theme="@style/Theme.AppCompat.NoActionBar"。我恢复了旧的 AppTheme,然后它又开始工作了。 NoActionBar 主题似乎与对话框不兼容。

【讨论】:

【参考方案5】:

我在不同的情况下遇到了这个错误,结果我不小心将可绘制对象设置为R.id.something 而不是R.drawable.something

【讨论】:

谢谢你,我在我的 XML 中设置了一个可绘制对象为 @id/something,这就是导致这次崩溃的原因! @Sam。我的最小 SDK 是 Android 5.0。我不需要做你提到的事情,对吧?但我仍然在一些运行 Android 5.1 的设备上崩溃 @zulkarnainshah,据我记得,我不小心尝试使用 id 作为可绘制对象,因此错误消息 (Resource is not a Drawable) 在我的情况下非常准确。这可能适用于任何 Android 版本,因为 id 不是可绘制对象。【参考方案6】:

确保您遵循了上述解决方案,如果这些解决方案都不适合您,请尝试此方法。

在我的情况下,问题是由于只有 hdpi 图像分辨率的可绘制图标。将这些图标更改为文件夹,其中还包含 xhdpi、mdpi、xxhdpi 和 xxxhdpi 分辨率。

这解决了我的问题。

PS:

我通过安装插件“Android drawable importer”将图标转换为不同的图像分辨率。

【讨论】:

【参考方案7】:

也许你的视图背景资源不在drawable dir中,是彩色的。查看背景不支持彩色资源

像这样查看背景

    <?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>

【讨论】:

【参考方案8】:

您可以通过确保不包含您的 drawable.xml (v24) 来使其正常工作

【讨论】:

【参考方案9】:
<ImageView
...
            android:src="@drawable/realtconsult" />

如果您从视图中编写它,那么这将起作用。

【讨论】:

【参考方案10】:

drawable 文件夹中包含多个文件夹(不可见),如果出现此类错误,请将发生错误的文件复制粘贴到所有目录或至少复制粘贴到 night 和正常的 drwable 文件夹

enter image description here

【讨论】:

【参考方案11】:

当您将图像放入drawable 文件夹时,默认情况下它们的名称是-v24

如果您不确定,只需将图像再次拖放到可绘制文件夹中即可。 确保名称末尾不是 -v24。

旧 API 的解决方案

【讨论】:

【参考方案12】:

将所有 ic_xyz.xml 文件夹移动到可绘制(v24),即选择存在此问题的文件夹并将其移动到或选择--->重构--->移动文件->(更改路径)到可绘制(v24)。

【讨论】:

我反其道而行之,它奏效了。 (从 v24 移至普通文件夹)

以上是关于Resources$NotFoundException:资源不是可绘制的(颜色或路径)?的主要内容,如果未能解决你的问题,请参考以下文章

IDEA 怎么设置多个 resources 目录

在xcode copy bundle resources 在哪

IDEA的resources下面如何创建xml以及如何创建包?

resources的名词解释,要用英文的,在线等,谢谢

resources是啥意思

Unity打包安卓,读取prefab,不能用resources.load吗