Resources$NotFoundException: Drawable com.example.test:drawable/back_button с идентификатором ресурса #0x7f080073

Недавно я добавил векторные рисунки (anydpi) в свой проект студии Android в дополнение к изображениям png (mdpi, hdpi, xhdpi и xxhdpi) — сейчас студия Android делает это по умолчанию.

Я сразу начал получать эту ошибку:

2019-02-10 23:10:25.870 2722-2722/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.test, PID: 2722
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.test/com.example.test.SettingsActivity}: android.content.res.Resources$NotFoundException: Drawable com.example.test:drawable/back_button with resource ID #0x7f080073
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2951)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6718)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: android.content.res.Resources$NotFoundException: Drawable com.example.test:drawable/back_button with resource ID #0x7f080073
     Caused by: android.content.res.Resources$NotFoundException: File res/drawable/back_button.xml from drawable resource ID #0x7f080073
        at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:847)
        at android.content.res.ResourcesImpl.loadDrawable(ResourcesImpl.java:631)
        at android.content.res.Resources.getDrawableForDensity(Resources.java:888)
        at android.content.res.Resources.getDrawable(Resources.java:827)
        at android.content.Context.getDrawable(Context.java:635)
        at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:463)
        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:203)
        at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:191)
        at android.support.v7.content.res.AppCompatResources.getDrawable(AppCompatResources.java:102)
        at android.support.v7.widget.ToolbarWidgetWrapper.setNavigationIcon(ToolbarWidgetWrapper.java:599)
        at android.support.v7.app.ToolbarActionBar.setHomeAsUpIndicator(ToolbarActionBar.java:161)
        at com.example.test.SettingsActivity.setUpToolbarAndActionBar(SettingsActivity.java:642)
        at com.example.test.SettingsActivity.onCreate(SettingsActivity.java:159)
        at android.app.Activity.performCreate(Activity.java:7144)
        at android.app.Activity.performCreate(Activity.java:7135)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2931)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3086)
        at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
        at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
        at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1816)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6718)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
     Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #4: <bitmap> requires a valid 'src' attribute
        at android.graphics.drawable.BitmapDrawable.updateStateFromTypedArray(BitmapDrawable.java:849)
        at android.graphics.drawable.BitmapDrawable.inflate(BitmapDrawable.java:770)
2019-02-10 23:10:25.870 2722-2722/? E/AndroidRuntime:     at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:142)
        at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1332)
        at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1321)
        at android.graphics.drawable.StateListDrawable.inflateChildElements(StateListDrawable.java:194)
        at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:122)
        at android.graphics.drawable.DrawableInflater.inflateFromXmlForDensity(DrawableInflater.java:142)
        at android.graphics.drawable.Drawable.createFromXmlInnerForDensity(Drawable.java:1332)
        at android.graphics.drawable.Drawable.createFromXmlForDensity(Drawable.java:1291)
        at android.content.res.ResourcesImpl.loadDrawableForCookie(ResourcesImpl.java:833)
            ... 27 more

Ошибка привела сюда в моем коде:

Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar_settings);
setSupportActionBar(toolbar);

ActionBar actionBar = getSupportActionBar();

actionBar.setDisplayHomeAsUpEnabled(true);
int drawable = R.drawable.back_button;
actionBar.setHomeAsUpIndicator(drawable); // ERROR IS HERE
toolbar.setNavigationIcon(drawable);

Приведенный выше код вызывается в onCreate моей активности, где я устанавливаю настраиваемый элемент рисования (R.drawable.back_button) на кнопку «Назад» активности.

Однако R.drawable.back_button — это файл ресурсов для рисования, который изменяет рисуемый объект при нажатии:

<selector
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_pressed="false">
        <bitmap
            android:src="@drawable/back">
        </bitmap>
    </item>
    <item android:state_pressed="true">
        <bitmap
            android:src="@drawable/back"
            android:tint="@color/colorAccent">
        </bitmap>
    </item>
</selector>

Я пробовал использовать app:srcCompat вместо и в дополнение к android:src, но все равно получаю ошибку.

R.drawable.back состоит из 5 файлов с разными dpi: anydpi (вектор), mdpi, hdpi, xhdpi и xxhdpi.

И мои настройки градиента:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    buildToolsVersion '28.0.3'
    defaultConfig {
        applicationId "com.example.test"
        minSdkVersion 17
        targetSdkVersion 28
        versionCode 5
        versionName "1.1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        vectorDrawables.useSupportLibrary = true
        renderscriptTargetApi 24
        renderscriptSupportModeEnabled true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            zipAlignEnabled true
        }
    }
    lintOptions {
        checkReleaseBuilds false
        abortOnError false
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.android.support', module: 'support-annotations'
    })
    implementation('com.android.support:appcompat-v7:28.0.0') { force = true }
    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
    implementation('com.android.support:design:28.0.0') { force = true }
    implementation('com.android.support:support-v4:28.0.0') { force = true }
    implementation('com.android.support:support-vector-drawable:28.0.0') { force = true }
    testImplementation 'junit:junit:4.12'
    implementation("com.android.support:support-compat:28.0.0") { force = true }
    implementation 'com.squareup.picasso:picasso:2.71828'
    implementation 'commons-io:commons-io:2.5'
    implementation 'com.android.support:exifinterface:28.0.0'
    implementation 'com.android.support:cardview-v7:28.0.0'
}

Также интересно: когда я меняю drawable, который я установил в onCreate, на R.drawable.back (непосредственно используя drawable вместо R.drawable.back_button, который является файлом ресурсов), ошибки нет. Таким образом, сбой, по-видимому, связан с использованием векторных рисунков в файле ресурсов с возможностью рисования.

ОБНОВИТЬ:

Другая ошибка, которую я получаю:

В R.drawable.back_button, когда я использую только android:src, я получаю сообщение об ошибке:

<bitmap
    android:src="@drawable/back" <!-- ERROR: When using VectorDrawableCompat, you need to use srcCompat-->
    android:tint="@color/colorAccent"/>

Но когда я использую srcCompat

<bitmap <!-- ERROR: required attribute src should be defined-->
    app:srcCompat="@drawable/back"
    android:tint="@color/colorAccent"/>

Использование как src, так и srcCompat также не работает.


person ILikePython    schedule 11.02.2019    source источник
comment
Можешь попробовать ContextCompat.getDrawable(this, R.drawable.back_button)?   -  person Bach Vu    schedule 11.02.2019
comment
К сожалению, это не сработало...   -  person ILikePython    schedule 11.02.2019
comment
1) Drawables с атрибутами темы ContextCompat.getDrawable(getActivity(), R.drawable.name); Вы получите стилизованный Drawable, как указано в вашей теме Activity. Это, вероятно, то, что вам нужно. 2) Drawables без атрибутов темы ResourcesCompat.getDrawable(getResources(), R.drawable.name, null);   -  person Yaroslav Ovdiienko    schedule 11.02.2019
comment
Это тоже не сработало. Возможно, это ошибка?   -  person ILikePython    schedule 14.02.2019
comment
удалите png и добавьте это к своему при создании AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);   -  person Ankit Aman    schedule 26.10.2020


Ответы (2)


С вашим кодом проблем нет, нам нужно добавить @drawable/back в каждый пример папки с возможностью рисования main/res/drawable-xxhdpi, main/res/drawable-xhdpi”… и т. д., только тогда это будет работать. (т. е. каждый размер, например: hdpi, mdpi, xxhdpi и т. д.)

мы можем добавить back.png в каждую папку, используя студию Android, выполнив следующие действия.

  1. нажмите «Файл», а затем нажмите «Создать», затем «Изображение актива».

параметры

  1. Изменить тип актива на панель действий и значки вкладок»

Панель действий и значки вкладок

  1. Для переднего плана выберите «ClipArt».

клипарт

  1. Для Клипарта нажмите кнопку «Выбрать» и выберите любой значок.

выбрать клипарт

  1. В качестве имени ресурса введите имя файла значка имя

<сильный>6. Нажмите «Далее», после чего будут сгенерированы изображения всех размеров (hdpi, mdpi, xxhdpi и т. д.)

person sai Pavan Kumar    schedule 26.10.2020

Drawable icon = AppCompatResources.getDrawable(context, R.drawable. back_button);
actionBar.setHomeAsUpIndicator(icon); 

и установите ниже для создания

AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 
person Ankit Aman    schedule 26.10.2020