2011-11-20 27 views
9

Estoy tratando de combinar una cadena estática "codificada" con una referenciada desde strings.xml para elementos de matriz de cadenas.¿Cómo puedo concatenar cadenas estáticas con recursos de cadenas XML?

El objetivo es tener una lista de métricas dinámica en la que el número es el mismo para todos los idiomas, pero el valor de las métricas de texto puede cambiar por el lenguaje, algo como esto:

<string-array name="interval_labels"> 
    <item>30 @string/second</item> 
    <item>1 @string/minute</item> 
    <item>5 @string/minute</item> 
    <item>10 @string/minute</item> 
    <item>15 @string/minute</item> 
    <item>30 @string/minute</item> 
    <item>60 @string/minute</item> 
</string-array> 

En este momento, si quito los números antes de las referencias @string/..., funciona bien (como se menciona here), pero me preguntaba si hay una forma de recuperar la cadena referenciada y concatenarla a la "codificada".

+0

http://stackoverflow.com/a/2865276/1085128 parece indicar que es al menos casi posible. Posiblemente incluso completamente posible. – mako

+0

Al definir una entidad XML, es posible. Utilicé esta respuesta: http://stackoverflow.com/questions/3656371/dynamic-string-using-string-xml/24903097#24903097 – Andrew

Respuesta

6

Lo sentimos, los archivos de recursos de Android no admiten dicha sintaxis.

+0

si es así, es triste, supongo que tendré que mover los dígitos a las cadenas. xml también –

+0

Usando entidades XML, es posible hacer referencia a la misma cadena varias veces en un archivo xml de Android como strings.xml. Ver mi respuesta a continuación. – Andrew

-1

Hay una forma de clase-de conseguir este efecto, al definir el recurso de cadena con un marcador de posición y el uso de String.format() sobrecarga estilo de getResourses().getString() en el código detrás:

En string.xml

<string name="secs">%1$d seconds</string> 

En activity_layout.xml

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

En TheActivity.java

((TextView)findViewByID(R.id.secs_label)).setText(getResources().getString(R.string.secs, 25)); 
1

El uso de entidades XML es posible.

<?xml version="1.0" encoding="utf-8"?> 
<!DOCTYPE resources [ 
    <!ENTITY mintues "minutes"> 
    <!ENTITY minute "minute"> 
    <!ENTITY seconds "seconds"> 
]> 

<resources> 
    <string-array name="interval_labels"> 
    <item>30 &seconds;</item> 
    <item>1 &minute;/item> 
    <item>5 &minutes;</item> 
    <item>10 &minutes;</item> 
    <item>15 &minutes;</item> 
    <item>30 &minutes;</item> 
    <item>60 &minutes;</item> 
    </string-array> 
</resources> 

que utiliza esta respuesta: dynamic String using String.xml?

Cuestiones relacionadas