【问题标题】:android.content.res.Resources$NotFoundException for ic_sync_black_24dp.xmlic_sync_black_24dp.xml 的 android.content.res.Resources$NotFoundException
【发布时间】:2015-12-01 12:14:34
【问题描述】:

我已经为此苦苦挣扎了一个多星期,因为我认为这与我的环境有关,但我无法缩小范围。

我开始一个空项目,添加一个“空白”活动并接受所有默认值。项目完成设置后,我添加了一个“设置”活动。

在 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 次(创建全新的项目并连接两个活动),重新启动,搜索谷歌,搜索这里,我无法弄清楚向导放的 ic_sync_black_24dp.xml 有什么问题在我的项目中。

由于我假设这可能是我的 IDE 或本地构建配置中的环境问题,因此这里有一些关于我的设置的高级细节: Windows 10、Android Studio 1.5、JRE 1.8.0

【问题讨论】:

  • ic_sync_black_24dp 文件在哪里?
  • 你试过重命名它吗?
  • 我按照您的步骤在我的设置上重新创建了它,它没有引起任何问题。 Mac 上的 Android Studio 1.5。工作和非工作 Drawable 之间唯一立即明显的区别是,非工作绘图的宽度和高度设置为“24.0dp”,而不是像其他的那样设置为“24dp”,尽管正如我所说,这并没有不会导致我的设置出现问题。
  • @LewisMcGeary - 这就是线索!我把24.0改成了24,现在不崩溃了!我不知道为什么这会是一个依赖于平台的问题,我会根据您的配置与我的配置不同。

标签: android android-layout


【解决方案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】:

Lewis 注意到了帮助我解决问题的线索。我把 24.0 改成了 24

android:width="24dp"
android:height="24dp"

现在代码执行没有错误!谢谢刘易斯!

【讨论】:

  • 您设备的 Android 版本是多少?我在 Android 5 设备上遇到了同样的问题,但 Android 6 设备在相同的配置下工作正常!
  • 我一头雾水,刚下了Android Studio的补丁,现在问题又回来了,不管我是放24dp还是24.0dp。但是,如果我只是完全删除引用就可以了。这只是一个愚蠢的 XML。我测试过的虚拟设备是 5.0.1 和 google services 和 6.0。我的实际手机是 5.0 和 5.1——都表现出同样的故障。我不高兴你看到这个问题,但我很高兴有人可以重现它。希望我们能弄清楚它到底发生了什么。
  • 我检查了异常消息,它显示 android:pathData 字符串中的一些值是错误的,不仅仅是 24.0dp,但它在 Android Marshmallow 设备上工作正常。然后我尝试了其他活动,幸运的是,其他活动,如导航抽屉。所以解决方法是避免在 Android 5 设备上使用设置活动。
  • 明确地说,我的意思是避免从菜单/向导添加新的设置活动,而是手动添加,它可以解决我的问题。
【解决方案3】:

问题可能是您的“目标 SDK”设置。默认行为可能是设置 Android 6。将其设置为 Android 5.0.1 (21),并确保您已从 SDK Manager 下载 SDK。在执行此操作之前,您可能已经使用向导创建了设置活动,因此您应该删除设置活动,确保您具有适当的 SDK 和项目设置,然后重新创建它。

【讨论】:

  • 就我而言,我每次都在开始全新的项目,即使在一个新的/干净的项目中,我也看到了这种行为。这不是“旧”设置活动。
猜你喜欢
  • 2012-05-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多