2010-11-24 6 views
24

J'ai essayé de créer un projet de bibliothèque Android, et même si le processus de compilation fonctionne correctement, j'ai rencontré des problèmes lors du remplacement d'une ressource dans le projet qui utilise la bibliothèque.Chaîne Replace (or "Override") dans le projet de bibliothèque Android

Dans ma bibliothèque, j'ai:

  1. A library_layout.xml contenant

    < TextView
    android: id = "@ + id/str_my_string"
    android: layout_width = "wrap_content"
    android: layout_text = "wrap_content"
    >

  2. Un fichier java qui appelle

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

  3. Une ressource strings.xml contenant

    string name < = "my_string" > Placeholder </string >

Dans le projet en utilisant la bibliothèque, j'ai

  1. Une ressource strings.xml contenant

    < string name = "my_string" > contenu de chaîne réelle </string >

Le comportement que je pense est que lorsque je lance le projet à l'aide de la bibliothèque, la vue texte affiche contenu de la chaîne actuelle, mais il contient effectivement false.

regardant dans l'application qui utilise la bibliothèque, je ne voir deux R fichiers, et les deux ont R.string.my_string et les deux personnes sont égales à la même valeur numérique.

Répondre

56

J'ai le même arrangement et cela fonctionne pour moi comme prévu.

La bibliothèque a mise en page/classe avec cette référence à une des ressources de chaîne:

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

La bibliothèque fournit une valeur par défaut dans son strings.xml:

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

L'application principale a cette valeur dans ses chaînes.xml:

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

Lorsque je donne une valeur pour cette ressource dans les applications principales s trings.xml, je vois "Client depuis" lorsque l'application s'exécute, quand je le supprime des applications principales strings.xml, je vois la valeur de la bibliothèque, "Student Since".

semble que ce comportement est normal en fonction de ma lecture ici: http://developer.android.com/tools/sdk/eclipse-adt.html

citation pertinente de lien ci-dessus:

Dans les cas où un ID de ressource est défini dans l'application et la bibliothèque, les outils garantissent que la ressource déclarée dans l'application est prioritaire et que la ressource dans le projet de bibliothèque n'est pas compilée dans l'application .apk. Cela donne à votre application la flexibilité d'utiliser ou de redéfinir les comportements de ressources ou les valeurs définis dans une bibliothèque.

+0

Donc, il semble que j'avais simplement des problèmes avec Eclipse ne pas nettoyer vieux cruft. – jwriteclub

+5

Ceci est exact, mais il échouera si la chaîne est traduite dans la bibliothèque. La version traduite en lib remplace la version de l'application (traduite ou non). Donc, leçon apprise: ne traduisez pas une chaîne de caractères génériques. –

+1

@johand. pour les bibliothèques qui utilisent la ressource de chaîne traduite, n'importe quel moyen de la remplacer dans notre projet? – Bruce

Questions connexes