2016-05-31 77 views
1

因为我知道以下事情。在Android中将资源ID分配给布局

资源ID是一个32位的数字形式:PPTTNNNN。 PP是该资源用于的包 ; TT是资源的类型; NNNN是 该类型中的资源的名称。对于应用程序资源,PP 总是0x7f。

例子:

通过AAPT顺序处理这些资源文件:

layout/main.xml 
drawable/icon.xml 
layout/listitem.xml 

首先我们看到的类型是layout从而给出TT == 1。该类型下的第一个名称是“主”,因此给出NNNN == 1。最终的资源ID是0x7f010001

接下来我们看到drawable,因此给出TT == 2。该类型的第一个名称是“图标”,以便获得NNNN == 1。最终的资源ID是0x7f020001

最后我们看到另一个layout其中TT == 1像以前一样。这有一个新名称listitem,以便获得下一个值NNNN == 2。最终的资源ID是0x7f010002

问:

但最近我看到一些布局文件都是由下面的方法分配ID。

Java代码

this.f5160k = (ImageView) findViewById(2131755224); 
this.f5163n = findViewById(2131755219); 
this.f5162m = (LinearLayout) findViewById(2131755223); 
this.f5161l = (LinearLayout) findViewById(2131755220); 
this.f5158i = (GridView) findViewById(2131755222); 

由于第一部分this.f5160k是Declartion,因为我知道,但是这是什么格式2131755224。任何人都可以给我建议或知识。 ?

回答

5

21317552240x7F1000D8

十进制表示在该所共享的代码,显影剂决定硬编码的十进制数,而不是使用十六进制格式的。但是,两者具有相同的值并指向相同的resourceID。可以选择使用21317552240x7F1000D8

在R.java中,您可以找到十六进制格式的ID。

+0

这个'2131755224'是手动生成的,或者我们使得像'public.xml'文件。 – Ironman

+0

由于该值是硬编码的,因此您必须使用public.xml。这样,价值不会改变。 R.java自动生成,ID不断变化(并且不可能让它们在源代码中进行硬编码)。因此,在public.xml中,您可以以六进制格式定义ID,并在java文件中使用十六进制或十进制格式。由于它们是不同的表示形式,但数字相同(在这种情况下是相同的ID),因此没有区别。 – W0rmH0le

3

这些大数字只是格式为0x7f..(十六进制)的十进制表示形式。

long n = 2131755224; 
System.out.println(Long.toHexString(n)); 

输出:7f1000d8

2131755224 == 0x7F1000D8将返回true

相关问题