Android:布局目录中的图像ID

时间:2013-01-18 15:30:53

标签: android database image android-layout layout

我在不同城市的应用程序中有100张图片,我想将这些图片分成不同的组,让我们说在晚上,早上,晴天,下雨等......

我们知道当我们通过调用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的正确方法。

3 个答案:

答案 0 :(得分:2)

这些数字不固定。如果你改变某些东西,R将被重新生成并且可以具有完全不同的数字。这就是为什么在比较ID时,你要用名称进行比较。

而不是

if (i == 223344)

if (i == R.layout.image_1)

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

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

答案 1 :(得分: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
}

答案 2 :(得分:0)

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