ic_sync_black_24dp.xml

时间:2015-12-01 12:14:35

标签: android android-layout

我已经挣扎了一个多星期,因为我觉得它必须与我的环境有关,但我不能缩小它。

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

在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文件中删除指定此图标的一行,则项目构建正常,并且settings活动具有其他两个选项的图标,但不包含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显示正确,并显示图标的有效预览。

以下是&#34; good&#34;的内容。 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

3 个答案:

答案 0 :(得分:5)

似乎问题在于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"

答案 1 :(得分:2)

刘易斯注意到了帮助我解决问题的线索。我将24.0更改为24

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

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

答案 2 :(得分:2)

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