2014-10-31 41 views
5

id資源可以引用文件中後面的元素嗎?Android ID資源可以轉發嗎?

這裏我有兩個字段,一個是用戶名,另一個是密碼。我爲密碼字段創建了一個新的ID資源(語法爲@+id/),但用戶名字段在android:nextFocusDown字段中找不到它。我從佈局xml中省略了其他字段,因爲它們不相關。

在這種情況下,我需要如何聲明ID?

<EditText 
    android:id="@+id/login_username" 
    android:nextFocusDown="@id/login_password" /> 

<EditText 
    android:id="@+id/login_password" 
    android:nextFocusUp="@id/login_username" 
    android:nextFocusDown="@id/login_submit" /> 

與gradle這個建築,我得到看起來像這樣的錯誤:Error:(41, 32) No resource found that matches the given name (at 'nextFocusDown' with value '@id/login_password').

我沒有得到一個錯誤android:nextFocusUp="@id/login_username"場,這讓我相信你使用之前必須聲明ID它。

我也在我的代碼中收到編譯錯誤,因爲沒有R.java文件正在生成,很可能是因爲它建立的資源不是建立的。

隨着android中所有的花哨構建工具,我很驚訝這是一個問題。這是一個已知的問題或期望的行爲?

+2

資源編譯器不會向前看,只是@ + id在使用該ID的第一個位置,即使不是「ID」字段 – zapl 2014-10-31 05:19:54

回答

4

你可以通過這樣的

<resources> 
    <item name="login_password" type="id"/> 
</resources> 

這裏創建文件值/ ids.xml預先生成一些IDS是你的情況https://stackoverflow.com/a/12247971/4178124

+0

瞭解Android是開源的,我可以在沒有它的情況下添加類似文件作用域的ID過多的官僚程序? – pensono 2014-11-01 07:11:38

+0

你可以使用「hack」@zapl評論,它會起作用 – Dmitry 2014-11-01 08:19:33

6

您可以指定一個@ + ID的第一個值

<EditText 
    android:id="@+id/login_username" 
    android:nextFocusDown="@+id/login_password" /> 
<EditText 
    android:id="@+id/login_password" 
    android:nextFocusUp="@id/login_username" 
    android:nextFocusDown="@id/login_submit" /> 

有多個@ + id是沒有害處的。它可以使檢測拼寫錯誤更難一點,但如果你需要它,它會運行良好。

+0

很好的答案。爲了避免您指出的潛在錯字的缺點,可以省略第二個ID的「+」,以便每個ID只有一個「+」。 – Hong 2016-12-12 15:23:43