无论我使用的是从 material.io 站点下载的 SVG,还是使用 Android Studio 捆绑的“剪贴画”材质图标 SVG,这种情况都在发生。
例如,我转到文件 > 新建 > 矢量资源,选择“剪贴画”并选择名为“曝光加 1”的图标。我接受默认值,它在我的 drawable 目录中为我创建了这个 xml 文件:src/main/res/drawable/ic_baseline_exposure_plus_1_24.xml:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FF000000"
android:pathData="M19,5v14H5V5h14m0,-2H5c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5c0,-1.1 -0.9,-2 -2,-2z"/>
</vector>
只是添加这个 xml 文件的行为似乎对我的 R.txt 生成的文件做了一些可怕的事情,所以 id 值被分配错误。在添加此文件之前,我的应用程序启动并正确显示图像。加入这个文件,当我清理和重建,并重新启动我的应用程序,即使不进行任何更改在任何地方的代码,突然所有的后ImageView
s的显示错误的图像,因此,例如被填充了瓷砖R.drawable.somePng
现在显示R.drawable.otherPng
。
当我调试时,我可以看到代码仍在调用 R.drawable.somePng,但填充的 id 值实际上对应于 R.txt 文件中的 R.drawable.otherPng。
为什么会发生这种情况,我可以做些什么来解决它?
在输入对CommonsWare评论的回复时,我想我已经找到了问题所在。
我的应用程序允许用户创建、保存和修改 RPG 角色。有一个用户可以选择的股票字符列表,当创建这些字符时,我将它们保存在类似于以下的数据对象中:
class CharacterData {
final String name;
... etc
@DrawableRes
final int mainImage;
}
问题是当我添加新图像时,它会更改/重新排序分配的资源 ID 十六进制值。因此,当我再次加载我的应用程序时,我会使用不再指向同一个文件的已保存资源 ID 十六进制值加载这个已保存的字符对象。
如果我希望能够继续添加到应用程序而不破坏任何以前保存的字符,似乎我需要一种新的方法来保存/引用这些图像。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句