Подтвердить что ты не робот

Android.content.res.Resources $NotFoundException для ic_sync_black_24dp.xml

Я боролся с этим больше недели, потому что я полагаю, что это должно быть что-то с моей средой, но я не могу сузить его.

Я запускаю пустой проект, добавляю одно действие "Пустое" и принимаю все значения по умолчанию. После завершения настройки проекта я добавляю активность "Настройки".

Внутри MainActivity.java, я добавляю две строки кода для подключения двух действий, а затем создаю проект.

public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {

        Intent intent = new Intent(this, SettingsActivity.class);
        startActivity(intent);

        return true;
    }

    return super.onOptionsItemSelected(item);
}

Я отправляю приложение для отладки, и когда я выбираю "Настройки" на панели действий, приложение вылетает с:

android.content.res.Resources$NotFoundException: File res/drawable/ic_sync_black_24dp.xml from drawable resource ID #0x7f020049

Я получаю эту же ошибку на виртуальных изображениях, и когда я отправляю APK на реальное физическое устройство и пытаюсь просмотреть активность настроек.

Несколько раз я запускал новые и чистые проекты, и каждый результат получал одинаковый результат. Я пробовал чистые сборки, я пытался удалить материал R.java. Когда я смотрю на res/drawable/ic_sync_black_24dp.xml в моем проекте (который был создан мастером добавления нового действия), я вижу значок, и все выглядит нормально.

Если я удаляю одну строку из файла pref_headers.xml, который указывает этот значок, проект строит в порядке, а в активности настроек есть значки для двух других вариантов, но не значок ic_sync_black_24dp.xml.

Здесь строка, которую я должен удалить вручную из pref_headers.xml:

    android:icon="@drawable/ic_sync_black_24dp"

Итак, для меня это файл pref_headers.xml:

<!-- These settings headers are only used on tablets. -->

<header
    android:fragment="com.schramauto.anothertrial.SettingsActivity$GeneralPreferenceFragment"
    android:icon="@drawable/ic_info_black_24dp"
    android:title="@string/pref_header_general" />

<header
    android:fragment="com.schramauto.anothertrial.SettingsActivity$NotificationPreferenceFragment"
    android:icon="@drawable/ic_notifications_black_24dp"
    android:title="@string/pref_header_notifications" />

<header
    android:fragment="com.schramauto.anothertrial.SettingsActivity$DataSyncPreferenceFragment"
    android:title="@string/pref_header_data_sync" />

В res\drawable есть 3 xml файла, добавленные мастером, который добавил активность настроек. Все 3 отображаются правильно для меня и показывают действительный предварительный просмотр значка.

Вот содержимое "хорошего" xml, ic_info_black_24dp.xml:

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24dp"
    android:height="24dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zm1,15h-2v-6h2v6zm0,-8h-2V7h2v2z" />
</vector>

Вот сомнительный XML (ic_sync_black_24dp.xml):

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:width="24.0dp"
    android:height="24.0dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01,-.25 1.97,-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0,-4.42,-3.58,-8,-8,-8zm0 14c-3.31 0,-6,-2.69,-6,-6 0,-1.01.25,-1.97.7,-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4,-4,-4,-4v3z" />
</vector>

Опять же, я пробовал это, возможно, в 15 раз (создание новых проектов и подключение двух действий), перезагрузка, поиск в Google, поиск здесь, и я не могу понять, что не так с ic_sync_black_24dp.xml, что мастер поставил в моем проекте.

Поскольку я делаю предположение, что это может быть экологичным в моей среде IDE или моей локальной конфигурации сборки, вот некоторые детали высокого уровня моей настройки: Windows 10, Android Studio 1.5, JRE 1.8.0

4b9b3361

Ответ 1

Кажется, что проблема связана с API 21, 24.0dp, о котором упоминалось, не решила проблему для меня, а я получал:

E/PathParser: error in parsing "c-3.31 0,-6,-2.69,-6,-6 0,-1.01.25,-1.97.7,-2.8"

Я нашел ответ на https://github.com/google/material-design-icons/issues/225

Оказывается, недопустимый идентификатор pathData не может быть правильно проанализирован в API 21 (проблема не существует в API 22 или 23). Просто замените pathData на:

android:pathData="M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01,-.25 1.97,-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0,-4.42,-3.58,-8,-8,-8zm0 14c-3.31 0,-6,-2.69,-6,-6 0,-1.01 .25,-1.97 .7,-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4,-4,-4,-4v3z"

Ответ 2

Льюис заметил ключ, который помог мне решить проблему. Я изменил 24.0 до 24
android:width="24dp"
android:height="24dp"

И теперь код выполняется без ошибок! Спасибо, Льюис!

Ответ 3

Проблема может быть вашей настройкой для вас "Target SDK". Поведение по умолчанию может быть установкой Android 6. Установите его для Android 5.0.1 (21) и убедитесь, что вы загрузили SDK из диспетчера SDK. Прежде чем это сделать, вы, вероятно, создали настройку с помощью мастера, поэтому вы должны удалить активность настроек, убедиться, что у вас есть соответствующие параметры SDK и проекта, и заново создать его.