Sostituire (o “Override”) String in Android Library Project
-
27-09-2019 - |
Domanda
Ho cercato di fare un progetto di libreria di Android, e mentre il processo di compilazione funziona bene, ho corso in qualche guaio con la sostituzione di una risorsa nel progetto che utilizza la libreria.
Nella mia biblioteca ho:
-
Un
library_layout.xml
contenenteAndroid: id = "@ + id / str_my_string"
Android: layout_width =
"wrap_content" Android: layout_text =
"wrap_content" > -
file java A che chiama
((TextView) this.findViewById (R.id.str_my_string)) setText (R.string.my_string);.
-
Un
strings.xml
risorsa contenenteSegnaposto
Nel progetto utilizzando la libreria ho
-
Un
strings.xml
risorsa contenentecontenuto stringa effettiva
Il comportamento mi aspetto è che quando faccio funzionare il progetto utilizzando la libreria, i display Visualizza testo contenuti stringa effettiva , ma contiene in realtà false .
Guardando in app che usa la libreria, I do vedere due file R
, ed entrambi hanno R.string.my_string
e sia di quelli sono uguali per lo stesso valore numerico.
Soluzione
Ho la stessa disposizione e questo funziona per me come previsto.
La biblioteca ha layout / classe con questo riferimento ad una risorse di tipo stringa:
<TextView android:id="@+id/studentSinceLabel">
La libreria fornisce un valore di default nel suo strings.xml:
<string name="studentSinceLabel">Student Since</string>
L'applicazione principale ha questo valore nel suo strings.xml:
<string name="studentSinceLabel">Client Since</string>
Quando ho givve un valore per questa risorsa nella app principale strings.xml, vedo "Client Dal momento che" quando viene eseguito l'app, quando elimino dalla app principale strings.xml, vedo il valore dalla libreria, "Student Poiché".
Sembra Questo comportamento è previsto in base alla mia lettura qui: http://developer.android.com/tools/sdk/eclipse-adt.html
citazione rilevante dal link qui sopra:
Nei casi in cui un ID di risorsa è definito sia l'applicazione e la biblioteca, gli strumenti in modo che la risorsa dichiarate nella domanda ha la priorità e che la risorsa nel progetto di libreria non è compilato nel .apk dell'applicazione. Questo dà l'applicazione della flessibilità necessaria per usano o ridefinire eventuali comportamenti di risorse o valori che sono definiti in qualsiasi libreria.