-1

我在不同城市的应用中有 100 张图片,我想将这些图片分成不同的组,比如晚上、早上、晴天、下雨等……</p>

我们知道,当我们通过调用 R.layout.image_1 从布局文件夹中调用图像时,android 会为每个图像生成整数例如:

R.layout.image_1 (223344), R.layout.image_2 (556677), R.layout.image_3 (778899),

我可以创建一个包含晚上、早上字段的表格,我可以为每个图片分配一组图片,其整数 ID 为 (223344,556677),我可以调用晚上或早上组,我可以显示与这些组相关的所有图像。

我的问题是:Android 是否每次都生成相同的数字。这些数字是固定的吗?当应用程序运行时。

如果它是真的,那么上面的想法对我有用。如果这个想法不正确,那么请指导我在应用程序中处理数百个 PNG 的体面方法是什么。

4

3 回答 3

2

这些数字不是固定的。如果您更改某些内容,R 将重新生成并且可以具有完全不同的数字。这就是为什么在比较 id 时,您要按名称进行比较。

例如,而不是

if (i == 223344)

if (i == R.layout.image_1)

由于R.layout.image_1引用整数 id,名称不会改变(除非您更改布局 xml 名称。

如果您想动态获取资源 id(通过表示名称的字符串),您应该看看这个方法 - Resources#getIdentifier()

于 2013-01-18T15:36:42.640 回答
1

首先我们一般把图片放在drawable文件夹里。

Android每次都会生成相同的数字吗?

不。

这些数字在应用程序运行时是否固定?

是的。

事实上,一旦您的项目构建完成,相同构建的 id 将保持不变。
换句话说,对于某个生成的 APK 文件,id 不会改变。

那么如何利用这一点对资源进行分组呢?

您可以拥有一个包含 id 的静态 int 数组:

public static final int[] IMAGES_MORNING = {R.drawable.morning0, R.drawable.morning1, etc};
public static final int[] IMAGES_EVENING = {R.drawable.evening0, R.drawable.evening1, etc};

尽管更结构化的方法是在您的应用程序首次启动时将它们存储在数据库中。


或者您可以使用 A--C 建议的内容:例如获取早晨图像的所有 id

for(int i = 0; i < numberOfMorningImages ; i++){
    int id = getResources().getIdentifier("morning" + i, "drawable", getPackageName());
    // do something with the id
}
于 2013-01-18T16:06:37.753 回答
0

不,不能保证整数每次都相同,因此您描述的解决方案将不起作用。不幸的是,没有合适的方法在 res/drawable 文件夹中对可绘制对象进行分组。作为一种解决方法,您可以将它们存储在 assets 文件夹中,您可以在其中根据需要对它们进行分组。但是,Android 将无法以这种方式处理不同的分辨率。这个选择由你。希望这可以帮助。

于 2013-01-18T15:36:30.103 回答