我已经挣扎了一个多星期,因为我觉得它必须与我的环境有关,但我不能缩小它。
我开始一个空项目,添加一个"空白"活动并接受所有默认值。项目完成设置后,我添加一个"设置"活性。
在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
答案 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)
android:width="24dp"
android:height="24dp"
现在代码执行没有错误!谢谢刘易斯!
答案 2 :(得分:2)
问题可能是您为“Target SDK”设置的。默认行为可能是设置Android 6.将其设置为Android 5.0.1(21),并确保已从SDK Manager下载SDK。您可能在执行此操作之前使用向导创建了设置活动,因此您应该删除设置活动,确保您具有相应的SDK和项目设置,然后重新创建它。