1. 程式人生 > >關於android開發新增選單XML檔案之後無法在R.java中生成ID的問題

關於android開發新增選單XML檔案之後無法在R.java中生成ID的問題

因為和同學分開做的android軟體,現在想整合他做的介面部分,於是拷貝了res和src資料夾的檔案,其中包括一個res.menu資料夾中的XML。但是每次將該檔案匯入到工程總無法自動在R.java中生成相應的ID。

上網找了兩種方法:

第一種:使用專案(project)->clean……清除之後重新build專案。當我clean之後發現R.java檔案被刪除了,然後無論我怎麼重新執行也不能再自動生成出來。於是乎……悲劇了,重新建了新工程並使用其他方法了!

第二種:右擊選單中的該工程選擇Android Tools->Fix Project Properties。經過多次嘗試,發現這個選項並沒有做出任何修改……(也可能是我發覺不出吧),即使我結合上面的第一種方法clean之後也沒有任何反應!

那麼,問題到底出在哪裡呢??在我的專案選單中顯示的是整個專案沒有錯誤(當然,除去那些因為選單ID沒有著落而出現的錯誤),完全不知道該怎麼辦了……嘗試新建工程並在res資料夾下建立menu資料夾,然後再在裡面新建XML檔案,接著是複製程式碼到該資料夾裡。依舊沒有報錯,但是依然無法自動生成在R.java資料夾中!

經過了各種網上查資料和自己的各種嘗試,花了我兩個晚上,期間甚至包括自己手寫R.java檔案(當然,這種方法是不可取的,假如程式能執行成功的話,自己編寫的那一堆程式碼全部會被刪除,R.java依舊是按照系統自動生成的編寫方法去編寫相關的ID)依舊無果。

今晚找了鄒同學過來,估計是有過經驗,當看到我實際操作之後就發現了可能出現的錯誤!

問題這這裡:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <menuxmlns:android="http://schemas.android.com/apk/res/android">
  3.     <itemandroid:id="@+id/scan"
  4.           android:icon="@android:drawable/ic_menu_search"
  5.           android:title="connect"/>
  6.     <itemandroid:id="@+id/discoverable"
  7.           android:icon
    ="@android:drawable/ic_menu_mylocation"
  8.           android:title="discoverable"/>
  9. </menu>

title部分原來的程式碼寫的是"@string/..."因為我沒有在string檔案中新增相關的字串標示符對應值,所以這個選單XML是一個錯誤檔案,導致R.java不會自動產生帶有錯誤的XML檔案的ID。這種情況很特殊,這樣的情況在eclipse的android開發環境下完全不會報出任何錯誤(專案選單欄中不會顯示任何檔案錯誤!),這才讓我花了兩個晚上也沒弄明白到底是哪裡出錯了。

後來我發現其實細心點也是能發現這個錯誤所在的,或許是因為我缺乏經驗吧。以前一直無視console檢視下的執行資訊……

  1. [2012-03-08 22:33:22 - TTTTT] H:\Users\wenyu\workspace\TTTTT\res\menu\option_menu.xml:3: error: Error: No resource found that matches the given name (at 'title' with value '@string/connect').  
  2. [2012-03-08 22:33:22 - TTTTT] H:\Users\wenyu\workspace\TTTTT\res\menu\option_menu.xml:6: error: Error: No resource found that matches the given name (at 'title' with value '@string/discoverable').  

其實它早就告訴我哪裡出錯了,但是我卻完全不知道!!這提醒我,以後要注意看看console下的資訊了。

補充:

剛才還發現,除了XML檔案錯誤java不會有預編譯錯誤提醒,不能自動生成R.java檔案,還會有一種情況:資原始檔是不能出現大寫字母命名的!如果資原始檔用大寫字母命名,比如圖片名,那麼圖片是可以匯入到res資料夾裡面對應的子資料夾裡面,但是同樣的,R.java也是不會自動生成的,而且eclipse也不會報錯!