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

Android 资源$NotFoundException:资源不是可绘制的(颜色或路径)?,android,Android,我有一个文本视图,当它被点击时,我在对话框中填充一个列表视图。这段代码过去工作得很好,但现在它抛出了异常 这是我的代码: tvSelectedFont = (TextView)findViewById(R.id.lblQuoteSelectedFont); tvSelectedFont.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v)

我有一个文本视图,当它被点击时,我在对话框中填充一个列表视图。这段代码过去工作得很好,但现在它抛出了异常

这是我的代码:

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();
        }
    });
tvSelectedFont=(TextView)findviewbyd(R.id.lblQuoteSelectedFont);
tvSelectedFont.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
ListView ListView=新的ListView(上下文);
setAdapter(新的ArrayAdapter(上下文,android.R.layout.simple\u列表项),
新字符串[]{“Default”、“Serif”、“Monospace”});
最终对话框=新对话框(上下文);
setContentView(listView);
setTitle(R.string.txt_settings_QuotefontName);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
字符串selectedTypeFace=((TextView)视图).getText().toString();
tvSelectedFont.setText(selectedTypeFace);
开关(选择的TypeFace)
{
案例“衬线”:
selectedQuoteTypeFace=Typeface.SERIF;
打破
案例“Monospace”:
selectedQuoteTypeFace=Typeface.MONOSPACE;
打破
违约:
selectedQuoteTypeFace=Typeface.DEFAULT;
打破
}
TvQuoteExtSample.setTypeface(selectedQuoteTypeFace,selectedQuoteFontStyle);
dialog.dismise();
}
});
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): 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)
设备驱动程序API版本:29
用户空间API版本:29
03-17 14:33:24.701 23220-23220/com.example.manas.dailyquoteswidget E/﹕ 马里:版本=Linux-r3p2-01rel3构建日期=2014年7月22日星期二19:59:34
03-17 14:33:27.926 23220-23220/com.example.manas.dailyquoteswidget E/AndroidRuntime﹕ 致命异常:主
进程:com.example.manas.dailyquoteswidget,PID:23220
android.content.res.Resources$NotFoundException:资源不是可绘制的(颜色或路径):TypedValue{t=0x2/d=0x7f0100a7 a=3}
位于android.content.res.Resources.loadDrawable(Resources.java:3415)
位于android.content.res.TypedArray.getDrawable(TypedArray.java:602)
在android.widget.AbsListView上(AbsListView.java:1089)
在android.widget.ListView(ListView.java:152)上
在android.widget.ListView(ListView.java:148)上
在android.widget.ListView(ListView.java:144)上
在com.example.manas.dailyquoteswidget.DailyQuotesWidgetConfigureActivity$6.onClick上(DailyQuotesWidgetConfigureActivity.java:182)
在android.view.view.performClick上(view.java:4640)
在android.view.view$PerformClick.run(view.java:19425)
位于android.os.Handler.handleCallback(Handler.java:733)
位于android.os.Handler.dispatchMessage(Handler.java:95)
位于android.os.Looper.loop(Looper.java:146)
位于android.app.ActivityThread.main(ActivityThread.java:5593)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:515)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283)上
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099)
在dalvik.system.NativeStart.main(本机方法)

我想不出这个问题。有什么帮助吗?

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

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

解决方案是将您的drawable也放在drawable-…dpi文件夹中


希望这能有所帮助。

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

确保您遵循了上述解决方案,如果其中没有一个适合您,请尝试此方法

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

这就解决了我的问题

附言:


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

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

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


在我的例子中,图像存在于drawable-24文件夹中,因此它在api上不可用可能您的视图背景资源不在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>


您可以通过确保您的drawable.xml不包含在Mac in finder上(v24)来实现它。

我只需将文件夹中的所有文件../drawable/drawable-24移动到/drawable,所有内容都可以在较旧的android版本和Oreo上运行。当你复制的时候
<ImageView
...
            android:src="@drawable/realtconsult" />