I'm running into the following error only when testing on a Samsung Galaxy Nexus phone with Android 4.3 and API 18.
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_error.xml
from drawable resource ID #0x7f020098
at android.content.res.Resources.loadDrawable(Resources.java:2091)
at android.content.res.TypedArray.getDrawable(TypedArray.java:601)
at android.widget.TextView.<init>(TextView.java:803)
at android.widget.EditText.<init>(EditText.java:60)
In my Acitivty.java file, I've tried using the following methods to set my vector drawable:
editTextNickname.setCompoundDrawablesWithIntrinsicBounds(0, 0, R.drawable.ic_error, 0);
editTextNickname.setCompoundDrawables(null, null,
ContextCompat.getDrawable(getApplicationContext(), R.drawable.ic_error), null);
I'm using the latest support libraries in my build.gradle file, as shown below:
apply plugin: 'com.google.gms.google-services'
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.peprally.jeremy.peprally"
minSdkVersion 16
targetSdkVersion 24
versionCode 1
versionName "1.0"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
debug {
debuggable true
}
}
repositories {
mavenCentral()
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:24.1.1'
compile 'com.android.support:design:24.1.1'
compile 'com.android.support:cardview-v7:24.1.1'
compile 'com.android.support:support-v4:24.1.1'
compile 'com.android.support:support-vector-drawable:24.1.1'
compile 'com.facebook.android:facebook-android-sdk:4.6.0'
compile 'com.google.android.gms:play-services-appindexing:9.2.1'
compile 'com.google.firebase:firebase-core:9.2.1'
compile 'com.google.firebase:firebase-messaging:9.2.1'
compile 'com.amazonaws:aws-android-sdk-core:2.+'
compile 'com.amazonaws:aws-android-sdk-cognito:2.+'
compile 'com.amazonaws:aws-android-sdk-s3:2.+'
compile 'com.amazonaws:aws-android-sdk-ddb:2.+'
compile 'com.amazonaws:aws-android-sdk-ddb-mapper:2.+'
compile 'com.squareup.picasso:picasso:2.5.2'
compile 'com.android.volley:volley:1.0.0'
compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha1'
testCompile 'junit:junit:4.12'
}
apply plugin: 'com.google.gms.google-services'
I've seen similar problems being posted on StackOverflow but no good solutions yet. If anyone has any insights, please help! Thanks!
<--EDIT-->
After ignoring the issue and coming back to it, I found a solid solution to get around the VectorDrawable not supported issue. On top of what was suggested, you can create VectorDrawables using the code below:
public static Drawable getAPICompatVectorDrawable(Context callingContext, int resource_id) {
if (android.os.Build.VERSION.SDK_INT >= 21) {
return ContextCompat.getDrawable(callingContext.getApplicationContext(), resource_id);
} else {
return VectorDrawableCompat.create(
callingContext.getResources(),
resource_id,
callingContext.getTheme());
}
}
I also had issues trying to put vector drawables directly into xml files. And I couldn't find a way to get around that so I eventually just took them out of my xml files and injected them programmatically in java using the same function as above. The error I got from using vector drawables inside my xml is shown below, if anyone has a better solution, I would love to hear it!
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.
peprally.jeremy.peprally/com.peprally.jeremy.peprally.activities.
NewCommentActivity}:
android.view.InflateException: Binary XML file line #90: Error inflating class TextView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2211
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
at android.app.ActivityThread.access$600(ActivityThread.java:141)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5103)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #90:
Error inflating class TextView
A drawable resource is a general concept for a graphic that can be drawn to the screen and which you can retrieve with APIs such as getDrawable (int) or apply to another XML resource with attributes such as android:drawable and android:icon . There are several different types of drawables: A bitmap graphic file ( .png, .jpg, or .gif ).
Good luck folder fiends! This could also happen if the resource you are referring to (lets call it ResA) is in-turn referring to a resource which is missing (lets call it ResB). Android will raise the ResourceNotFoundException for ResA even though whats really missing is ResB.
Shape drawable. A drawable resource is a general concept for a graphic that can be drawn to the screen and which you can retrieve with APIs such as getDrawable (int) or apply to another XML resource with attributes such as android:drawable and android:icon . There are several different types of drawables:
Resource ID. A unique resource ID for this drawable. To create a new resource ID for this item, use the form: "@+id/ name ". The plus symbol indicates that this should be created as a new ID. You can use this identifier to retrieve and modify the drawable with View.findViewById() or Activity.findViewById().
Could you please test the code below? Just to see if works... Then, I'll update the answer with more information
public class MainActivity extends AppCompatActivity {
static {
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
}
@Override
protected void onCreate(Bundle arg0) {
...
}
...
}
Background
I was aware that due to this Google Issue - 205236, support to vector Drawable was disabled due to Memory Issues.
One of the comments in that issue is that:
To fix this issue, support for VectorDrawable from resource XML had to be removed.
And then,
In the next release I've added an opt-in API where you can re-enable the VectorDrawable support which was removed.
So, they re-enabled that option in
Android Support Library 23.4.0
For AppCompat users, we’ve added an opt-in API to re-enable support Vector Drawables from resources (the behavior found in 23.2) via AppCompatDelegate.setCompatVectorFromResourcesEnabled(true) - keep in mind that this still can cause issues with memory usage and problems updating Configuration instances, hence why it is disabled by default.
Maybe, build.gradle
setting is now obsolete and you just need to enable it in proper activities (however, need to test).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With