添加新的矢量资产会改变现有 Android 资源的 ID?

里根

无论我使用的是从 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 值被分配错误。在添加此文件之前,我的应用程序启动并正确显示图像。加入这个文件,当我清理和重建,并重新启动我的应用程序,即使不进行任何更改在任何地方的代码,突然所有的后ImageViews的显示错误的图像,因此,例如被填充了瓷砖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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章