2010-11-24 19 views
24

He estado tratando de hacer un proyecto de biblioteca android, y aunque el proceso de compilación funciona bien, he tenido algunos problemas para reemplazar un recurso en el proyecto que usa la biblioteca.Reemplazar (o "Anular") Cadena en Android Library Project

En mi biblioteca tengo:

  1. Un library_layout.xml contiene

    < TextView
    android: id = "@ +/Identificación del str_my_string"
    androide: layout_width = "wrap_content"
    android: layout_text = "wrap_content"
    >

  2. Un archivo Java que llama a

    ((TextView) this.findViewById (R.id.str_my_string)) setText (R.string.my_string).;

  3. Un recurso strings.xml contiene

    < string name = "mi_cadena" > marcador de posición </cadena >

En el proyecto usando la biblioteca tengo

  1. Un recurso strings.xml que contiene

    < string name = "mi_cadena" > real contenido de la cadena </cadena >

El comportamiento que espero es que cuando ejecuto el proyecto usando la biblioteca, el texto vista muestra contenido de la cadena real, pero en realidad contiene falso.

Buscando en la aplicación que utiliza la biblioteca, me hago ver dos R archivos, y ambos tienen R.string.my_string y ambas cosas son iguales al mismo valor numérico.

Respuesta

56

Tengo la misma disposición y esto funciona para mí como se esperaba.

La biblioteca tiene diseño/clase con esta referencia a una cadena de recursos:

<TextView android:id="@+id/studentSinceLabel"> 

La biblioteca proporciona un valor por defecto en su strings.xml:

<string name="studentSinceLabel">Student Since</string> 

La aplicación principal tiene este valor en sus cadenas.xml:

<string name="studentSinceLabel">Client Since</string> 

Cuando givo un valor para este recurso en las aplicaciones principales trings.xml, veo "Cliente desde" cuando se ejecuta la aplicación, cuando lo elimino de la aplicación principal strings.xml, veo el valor de la biblioteca, "Estudiante desde".

parece que este es el comportamiento esperado basado en mi lectura aquí: http://developer.android.com/tools/sdk/eclipse-adt.html

cita relevante del foro:

En los casos en que un identificador de recursos se define en la aplicación y la biblioteca, las herramientas garantizan que el recurso declarado en la aplicación tenga prioridad y que el recurso en el proyecto de la biblioteca no se compile 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

Parece que simplemente estaba teniendo problemas con Eclipse al no limpiar el antiguo cruft. – jwriteclub

+5

Esto es exacto, pero fallará si la cadena se traduce en la biblioteca. La versión traducida en lib reemplaza a la versión de la aplicación de uso (traducida o no). Entonces lección aprendida: no traduzca una cadena de marcador de posición. –

+1

@johand. para las bibliotecas que usan recursos de cadenas traducidas, ¿hay alguna manera de anularlo en nuestro proyecto? – Bruce