2012-02-23 99 views
11

我的應用程序依賴於庫項目。訪問應用程序資源

menu.xml文件文件是應用程序項目中。
所有的Java代碼庫項目中,包括菜單處理程序代碼onOptionsItemSelected()

是否有從庫項目訪問應用程序資源的方法嗎?我想寫這樣的事情,這是目前不可能的,因爲菜單項,從庫中是不可見的:

if (item.getItemId()==R.id.settings) { 
... 
} 
+4

你可能想,如果你的圖書館需要對什麼是您的應用程序項目假設重新考慮你的設計。如果菜單是您希望與其他項目共享的內容,請將菜單移至庫項目中。 – 2012-02-23 21:05:01

+0

我忘了提及庫項目包含除了一個以外的所有菜單。項目菜單有一個額外的「獲取專業版」菜單項。 – tos 2012-02-23 21:09:30

+0

也許你想從你的圖書館活動中進行分類,並手動添加菜單選項到「Go Pro」。 – 2012-02-23 21:22:28

回答

17

是的,你可以,如果你知道你的庫的包名。
Resources.getIdentifier(...)

你可以這樣做:

getResources().getIdentifier("res_name", "res_type", "com.library.package");

例如:

R.id.settings是:

getResources().getIdentifier("settings", "id", "com.library.package");

+0

它工作正常,謝謝。 – tos 2012-02-23 21:40:43

+0

好的,我怎麼能到達即「android:windowBackground」? – deadfish 2016-10-02 10:07:56

+0

總是讓我「0」,這意味着無法找到它。 – 2018-02-11 10:16:53

12

你真的應該只包括版本的資源在您的圖書館項目中。如果您想在應用程序中使用不同的menu.xml,則可以這樣做,它將覆蓋庫項目中的副本。

Library Projects docs

在情況下,資源ID在應用程序和庫都定義,該工具可確保在應用程序中聲明的資源獲得優先權,並在庫項目資源沒有被編譯到應用程序.apk中。這使您的應用程序能夠靈活地使用或重新定義在任何庫中定義的任何資源行爲或值。

+0

這可能是解決問題的最佳解決方案 - 完全不需要這些。我試過了,工作正常。謝謝。 – tos 2012-02-23 22:12:39

+0

注意這[不順利](https://stackoverflow.com/questions/37213375/is-it-possible-to-redefine-a-librarys-databinding-resource)與[數據綁定(HTTPS:/ /developer.android.com/tools/data-binding/guide.html)。 – PLNech 2016-05-24 14:33:52

+0

更好的解決方案。 – SHM 2016-08-10 11:12:22

相關問題