2012-02-23 15 views
11

Mi aplicación depende de un proyecto de biblioteca.Acceder a los recursos de la aplicación desde el proyecto de la biblioteca

El archivo menu.xml se encuentra dentro del proyecto de la aplicación.
Todo el código de Java está dentro del proyecto de la biblioteca, incluido el código del controlador de menú onOptionsItemSelected().

¿Hay alguna manera de acceder a los recursos de la aplicación desde el proyecto de la biblioteca? Me gustaría escribir algo como esto, que es actualmente imposible, ya que los elementos de menú no son visibles desde la biblioteca:

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

Es probable que desee volver a pensar su diseño si su biblioteca necesita hacer suposiciones sobre lo que está en su proyecto de aplicación. Si el menú es algo que desea compartir con otros proyectos, mueva el menú al proyecto de la biblioteca. –

+0

Olvidé mencionar que el proyecto de la biblioteca contiene todos los menús, excepto uno. El menú del proyecto tiene una opción de menú adicional "obtener la versión pro". – tos

+0

Quizás desee hacer una subclase de la actividad de su biblioteca y agregar manualmente la opción de menú a "Go Pro". –

Respuesta

17

sí se puede saber si el nombre del paquete de tu biblioteca.
Resources.getIdentifier(...)

Usted puede hacer:

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

ejemplo:

R.id.settings sería:

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

+0

Funciona bien, gracias. – tos

+0

OK, ¿cómo puedo alcanzar i.e "android: windowBackground"? – deadfish

+0

siempre me da "0" y eso significa que no puede encontrarlo. –

12

realmente debería incluir sólo una versión de la menu.xml recurso en su proyecto de biblioteca. Si desea tener un menu.xml diferente en su aplicación, puede hacerlo y anulará la copia del proyecto de la biblioteca.

Desde el Library Projects docs:

En los casos en que un identificador de recursos se define en la aplicación y la biblioteca, las herramientas de garantizar que el recurso declarada en la solicitud tiene prioridad y que el recurso en el proyecto de la biblioteca no está compilado en la aplicación .apk. Esto le da a su aplicación la flexibilidad de usar o redefinir cualquier comportamiento de recursos o valores definidos en cualquier biblioteca.

+0

Esta es probablemente la mejor solución integral al problema, eliminando por completo la necesidad. Lo intenté, funciona bien. Gracias. – tos

+0

Tenga en cuenta que esto [no funciona bien] (https://stackoverflow.com/questions/37213375/is-it-possible-to-redefine-a-librarys-databinding-resource) con [Enlace de datos] (https://developer.android.com/tools/data-binding/guide.html). – PLNech

+0

mejor solución. – SHM

Cuestiones relacionadas