Recursos de importación android de proyecto de biblioteca
¿Es posible utilizar recursos como cadenas que se definen en proyectos de bibliotecas en los proyectos de aplicación? ¿si es así, cómo? Porque no puedo parecen resolver las cadenas que me gustaría resolver de la siguiente manera:
String title = "sample"; int id = ressources.getIdentifier(title, "string", "com.package");
Me da esta excepción
- Agregar efectos de sombra de gota al campo EditarTexto
- Barra de herramientas que se superpone debajo de la barra de estado
- Color Estado Lista no reconocida en forma Drawable
- Cómo analizar el contenido html en android utilizando SAX PARSER
- Acceso al atributo de manifiesto android: installLocation
WARN / ResourceType (278): No identificador de paquete al obtener el valor para el número de recurso 0x00000000 WARN / System.err (278): android.content.res.Resources $ NotFoundException: String resource ID # 0x0
La cadena ("sample") que estoy buscando está definitivamente en este paquete proporcionado en strings.xml del proyecto de la biblioteca. Incluso puedo verlo en el R.java
- Otros recursos $ NotFoundException en setContentView
- Android: mover los botones libremente en el editor de diseño gráfico de Eclipse
- Android PdfDocument dañado cuando se guarda en un almacenamiento externo
- ¿Existe alguna diferencia entre "center_horizontal | center_vertical" y "center"
- Cómo crear una flecha que mira hacia la derecha usando xml formas en android?
- Cómo obtener contenido completo de noticias de un sitio web de noticias
- Android TextView SingleLine campo oculta texto largo
- Android.view.inflateexception binario archivo xml línea # 1 error inflar clase android.widget.relativeLayout
Así que parece
Int id = recursos.getIdentifier (título, "cadena", "com.package");
Está devolviendo 0
, lo que significa que no puede encontrar el recurso especificado. La llamada posterior a ressources.getIdentifer()
provoca la excepción, ya que 0
no es un id de recurso válido.
Aquí hay algunas ideas de depuración / alternativas:
-
Usted probablemente ya ha hecho esto una docena de veces, pero no duele mencionar: primero revise la ortografía de todo:
- La ortografía del paquete es correcta (tanto en el proyecto de la biblioteca como en el proyecto del cliente)
- Cadena de recursos es correcta (proyecto de biblioteca y proyecto de cliente),
- Es la ortografía de la biblioteca correcta en el elemento
uses-library
AndroidManifest.xml
, - Etc.
- ¿Puede acceder a cualquier recurso en esa biblioteca o es el problema específico de ese recurso (
title
) o es específico para ese tipo de recurso (cadenas)? ¿Puede acceder a los recursos de otra biblioteca?
- ¿Está accediendo a la biblioteca como un archivo jar? Puede jar el código, pero no puede acceder a los recursos de un tarro.
Android – ¿Es posible crear una biblioteca personalizada para usarla en varias aplicaciones?
- ¿Has probado el formato de nombre alternativo?
Código
String fullyQualifiedResourceName = "com.package:string/sample"; int id = ressources.getIdentifier(title, null, null); if (id == 0) { Log.e(TAG, "Lookup id for resource '"+fullyQualifiedResourceName+"' failed"; // graceful error handling code here }
- Usted podría intentar usar la reflexión:
Código
final String resourceName= "sample"; final int id; try { final Class resourceType = com.package.R.string.class; final Field field = resourceType.getField(title); id = field.getInt(null); } catch (final Exception e) { Log.e(TAG, "Lookup id for resource '"+resourceName+"' failed"; // graceful error handling code here }
Android, obtener ID de recurso de cadena?
http://daniel-codes.blogspot.com/2009/12/dynamically-retrieving-resources-in.html
En el código del proyecto, importe la clase R:
import com.application.libraryproject.R
A continuación, puede hacer referencia a cualquier cadena u otro recurso definido por xml como este:
String mystring = getString(R.string.app_name);
o similar.
Tuve un problema similar y lo resolví con el método getPackageName()
dentro de la Biblioteca de proyectos.
En su caso, debe ser:
String title = "sample"; int id = ressources.getIdentifier(title, "string", getPackageName());
Sí, defina los recursos en su proyecto de biblioteca como normales. A continuación, haga referencia a ellos en el proyecto importando la biblioteca prefijando la clase R con el nombre del paquete en AndroidManifest.xml de la biblioteca.
- Cómo superponer elementos en LinearLayoutManager – RecyclerView (como tarjetas de apilado)
- Android: La ventana del cursor está llena