我在不同城市的应用程序中有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的正确方法。
答案 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无法通过这种方式处理不同的分辨率。这个选择由你。希望这会有所帮助。