2012-02-23 6 views
11

Мое приложение зависит от проекта библиотеки.Доступ к ресурсам приложений из проекта библиотеки

menu.xml файл находится в проекте приложения.
Весь код java находится в рамках проекта библиотеки, включая код обработчика onOptionsItemSelected().

Есть ли способ получить доступ к ресурсам приложений из проекта библиотеки? Я хотел бы написать что-то вроде этого, который в настоящее время невозможно, поскольку пункты меню не видны из библиотеки:

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

Возможно, вы захотите переосмыслить свой дизайн, если вашей библиотеке необходимо сделать предположения о том, что находится в вашем проекте приложения. Если меню - это то, что вы хотите поделиться с другими проектами, переместите меню в проект библиотеки. –

+0

Я забыл упомянуть, что проект библиотеки содержит все меню, кроме одного. В меню проекта есть дополнительный пункт меню «получить про версию». – tos

+0

Возможно, вы хотите подкласс из своей деятельности в библиотеке и вручную добавить параметр меню «Go Pro». –

ответ

17

Да, вы можете, если вы знаете имя пакета вашей библиотеки.
Resources.getIdentifier(...)

Вы можете сделать:

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

например:

R.id.settings будет:

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

+0

Он отлично работает, спасибо. – tos

+0

ОК, как я могу достичь i.e "android: windowBackground"? – deadfish

+0

всегда получаю «0», и это означает, что вы не можете его найти. –

12

Вы должны действительно просто включить версию menu.xml ресурс в вашем проекте библиотеки. Если вы хотите иметь другое приложение menu.xml в своем приложении, вы можете это сделать, и оно переопределит копию из проекта библиотеки.

От Library Projects docs:

В тех случаях, когда идентификатор ресурса определяется как приложения и библиотеки, инструменты обеспечения, что ресурс, заявленные в ходатайстве, получает приоритет и что ресурс в проекте библиотеки не компилируется в приложение .apk. Это дает вашему приложению гибкость в использовании или переопределении любых типов поведения ресурсов или значений, определенных в любой библиотеке.

+0

Это, вероятно, лучшее решение проблемы - устранение необходимости в целом. Я попробовал, отлично работает. Спасибо. – tos

+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

+0

лучшее решение. – SHM

Смежные вопросы