Android: ¿Cómo inyectar un elemento <string> en otro elemento <string> en XML?

Me gustaría saber si hay una manera de insertar / inyectar un elemento <string> definido en un archivo XML en otro elemento <string> , haciendo eso sólo con XML.

Por ejemplo, podría tener:

 <string name="author">Francesco</string>` 

Y estoy buscando algo como:

 <string name="about_application">Author: @string/author</string>` 

De modo que getString(R.string.about_application) resultaría en "Autor: Francesco".

Sé que podría combinar los dos elementos en código Java usando String.format(string, formatArgs) como por ejemplo:

 <string name="author">Francesco</string> <string name="about_application">Author: %1$s</string>` 

Y luego en el uso de código

 String.format(getString(R.string.about_application), getString(R.string.author)) 

Pero me gustaría hacerlo en XML directamente.

¿Puede alguien sugerirme una manera de hacerlo?

Si entiendo lo que estás buscando hacer, entonces las entidades generales internas (analizadas) podrían ayudarte a lograr lo que buscas.

Un ejemplo de cómo puede definir el valor "Francesco" como una entidad denominada "auth" y luego usarlo en su XML:

 <?xml version="1.0"?> <!DOCTYPE doc [ <!ENTITY auth "Francesco"> ]> <doc> <string name="author">&auth;</string> <string name="about_application">Author: &auth;</string> </doc> 

Cuando se lee por un analizador XML, el documento será analizado y evaluado, o "visto", como:

 <?xml version="1.0"?> <doc> <string name="author">Francesco</string> <string name="about_application">Author: Francesco</string> </doc> 

Desafortunadamente no creo que eso sea posible. Hice una pregunta similar hace un tiempo, y me dijeron que no era posible.

Gradle plugin 0.10 trae lo que ellos llaman manifestPlaceholders que básicamente hace lo que usted necesita, pero esta función actualmente sólo funciona en el AndroidManifest. Hay aunque un problema abrió la orientación de la próxima versión de Android versión 1.4 ( 1.3 está actualmente en beta4 por lo que debería estar cerca de RC1 y podría ver un 1.4 beta1 pronto) .

Este problema debe expandir los marcadores de posición en archivos de configuración xml ( sólo rezo para que esto incluya el archivo de cadenas y no sólo la configuración básica de xml ).

De : http://tools.android.com/tech-docs/new-build-system

Para reemplazos de marcadores de posición personalizados, utilice el siguiente DSL para configurar los valores de marcador de posición:

 android { defaultConfig { manifestPlaceholders = [ activityLabel:"defaultName"] } productFlavors { free { } pro { manifestPlaceholders = [ activityLabel:"proName" ] } } 

Sustituirá el marcador de posición en la siguiente declaración:

<activity android:name=".MainActivity"> android:label="${activityLabel}" >

No puedo esperar para probarlo. De esta manera usted podría poner un marcador de posición en varias situaciones en el archivo de cadenas y definir el valor sólo en un lugar en lugar de modificar todos los archivos java para agregar un argumento con% 1 $ s

Por ahora la única solución limpia es aunque el truco de entidad, pero esto no funcionará si desea anular el valor en los sabores ya que la entidad debe estar definida en el mismo archivo xml.

  • Desenfocar imagen con Universal Image Loader
  • Centrar un TextView en un TableRow en un TableLayout
  • Trunca automáticamente texto TextView para no superponer otro TextView
  • Cómo poner TODO comentarios en xml?
  • Cómo comprobar qué recurso de imagen actual se adjunta a ImageView en android xml?
  • Android - ¿Cómo crear el ID de xml?
  • Android Studio - ¿Cómo se logró este truco de estructura de archivos de recursos?
  • Excepción de Android asynctask
  • Buscar en archivo XML con XPath en Android
  • ¿Hay una manera de cargar arbitrariamente recursos en tiempo de ejecución en Android?
  • Tiene algunos problemas con el archivo xml. Androide. Eclipse. Error: Invalid start tag PreferenceScreen
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.