如何获取Drawable的资源ID

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何获取Drawable的资源ID相关的知识,希望对你有一定的参考价值。

例如:ImageView imageView =(ImageView) findViewById(R.id.imageView1);Drawable currentDrawable = imageView.getDrawable();根据currentDrawable 如何获取当前的 R.drawable.?

int resource_ID = getResources().getIdentifier("imageName", "drawable", "com.test.imagetest"); Drawable image = getResources().getDrawable(resource_ID);com.test.imagetest 为你的包名; 参考技术A http://stackoverflow.com/questions/4526585/imageview-drawable-id-in-android你看一下吧 参考技术B 根据 ID 来 判断是不是当前 的这个 ..

资源$ NotFoundException:资源不是Drawable(颜色或路径)?

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

无法弄清楚问题所在。有什么帮助吗?

答案

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

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

希望有所帮助。

另一答案

在Android Studio中,将Project层次结构更改为Project Files。

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

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

另一答案

我想通了,这不是代码的问题,而是主题。我最近在问题开始之后改变了android:theme="@style/AppTheme"to android:theme="@style/Theme.AppCompat.NoActionBar"的主题。我恢复了旧的AppTheme thene它再次开始工作。似乎NoActionBar主题与对话框不兼容。

另一答案

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

另一答案

我在另一种情况下遇到了这个错误,事实证明我偶然设置了一个drawable到R.id.something而不是R.drawable.something

另一答案

确保您遵循上述解决方案,如果非他们为您工作,请尝试此操作。

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

这解决了我的问题。

PS:

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

另一答案

也许你的视图背景资源不是可绘制的目录,颜色。查看背景不支持颜色资源。

查看这样的背景

    <?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来使其正常工作(v24)

以上是关于如何获取Drawable的资源ID的主要内容,如果未能解决你的问题,请参考以下文章

android 获取当前壁纸的Drawable对象或者Bitmap。如何获取这张图片的ID或者名称。

如何获取具有已知资源名称的资源 id?

android如何获取drawable中图片的path?返回string路径

Android如何获取当前ImageView中的src资源

Android,从字符串中获取资源ID?

通过 ID 动态获取可绘制对象