Esto podría parecer una respuesta amplia, pero creo que aclarará un montón de cosas para las personas que pasaron horas buscándolo (soy uno de ellos).
La respuesta corta es sí, puede usar referencias en XML personalizado, no solo para cadenas, pero ese es el ejemplo que uso, para facilitar la comprensión.
Teniendo en cuenta el contexto:
- res/valores/strings.xml
(cadenas predeterminadas, por lo general es-es por conveniencia, pero eso es responsabilidad del desarrollador)
<resources>
<string name="sample_string">This is a sample string.</string>
</resources>
- res/values-fr/strings.xml
(cadenas fritas localizada)
<resources>
<string name="sample_string">Ceci est un exemple de chaîne</string>
</resources>
- res/xml/prueba.xml
(archivo XML personalizado)
<!-- @string/sample_string identifies both
the default and french localized strings,
the system settings determine which is used at runtime.
-->
<test>
<sample name="sampleName" text="@string/sample_string"/>
</test>
- src/com/example/app/TestXmlParser.java
//Omitted imports for clarity.
public class testXmlParser {
public static final String ns = null;
public int parse(XmlResourceParser parser) throws XmlPullParserException,
IOException{
while(parser.next() != XmlPullParser.END_DOCUMENT){
if(parser.getEventType() == XmlPullParser.START_TAG){
if(parser.getName().equalsIgnoreCase("sample")){
// This is what matters, we're getting a
// resource identifier and returning it.
return parser.getAttributeResourceValue(ns, "text", -1);
}
}
}
return -1;
}
Uso String getText(int id)
para obtener la cadena correspondiente a id
(localizado, si está disponible).
Utilizando el ejemplo anterior equivaldría a sustituir:
//Return the resource id
return parser.getAttributeResourceValue(ns, "text", -1);
con:
//Return the localized string corresponding to the id.
int id = parser.getAttributeResourceValue(ns, "text", -1);
return getString(id);
¿Quizás podría compartir más acerca de lo que está tratando de lograr? Como mencioné a continuación, la construcción @ + es para crear una nueva referencia y en el caso de @string esto no tiene sentido. No creo que tenga la intención de crear una nueva cadena aquí, sino crear una nueva referencia a un recurso de cadena diferente. Sería útil conocer el caso de uso para su ejemplo de código. –
me enfrento EXACTAMENTE a este problema ... ¿tengo alguna respuesta? –