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:
- Configuración del color del texto del botón con un estilo
- "No se encontró la descripción del mensaje" en strings.xml
- ¿Cómo puedo utilizar las operaciones lógicas en el enlace de datos de Android?
- Disposiciones condicionales de Android para teléfonos: tabletas
- Error: No se encontró ningún recurso que coincida con el nombre dado (en 'theme' con el valor '@ style / AppTheme')
<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?
- Utilizando diferentes archivos de cadenas en android
- Mejor manera de analizar la Biblia en Android
- problema de glowpadview con xml
- Creación de hashmap / map desde recursos XML
- WYSIWYG View Editor en 'Android'?
- Selector xml de Android para diseños
- Programar '? SelectableItemBackground' en la vista de Android
- Cadena de resultados de Android HttpUrlConnection truncada
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.
- Android Parse SDK i / o fallo formato desconocido (número mágico 227b)
- La aplicación se compila cada vez que Gradle se ejecuta, tomando un tiempo significativo