2016-05-31 74 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

相關問題