resource - como crear un string en android
La pluralización de Android no funciona, necesita ayuda (3)
Parece que necesita especificar el conteo dos veces, el primero se usa para determinar la cadena que se usará, y el segundo es el que se reemplaza en la cadena. p.ej
Resources res = this.getResources();
int tv = this.mObject.temp_c.intValue();
tTemp.setText(res.getQuantityString(R.plurals.degrees, tv, tv));
Y al menos en mis pruebas hasta ahora, los elementos xliff:g
en el recurso no son necesarios.
He intentado utilizar el recurso de los plurales con Android pero no he tenido suerte.
Aquí está mi archivo de recursos para mis plurales:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<plurals name="meters">
<item quantity="one">1 meter</item>
<item quantity="other">
<xliff:g id="count">%d</xliff:g>
meters
</item>
</plurals>
<plurals name="degrees">
<item quantity="one">1 degree</item>
<item quantity="other">
<xliff:g id="count">%d</xliff:g>
degrees
</item>
</plurals>
</resources>
... y luego aquí está el código que estoy usando cuando intento extraer la cadena de cantidad de mis recursos:
Resources res = this.getResources();
tTemp.setText(res.getQuantityString(R.plurals.degrees, this.mObject.temp_c.intValue()));
... pero el texto en el TextView sigue siendo %d degrees
y %d meters
.
¿Alguien sabe lo que está pasando? He depurado el código y la llamada res.getQuantityString (...) devuelve una cadena cuyo valor es %d degrees
o %d meters
. Aunque cuando la cantidad es 1, se evalúa correctamente a 1 degree
o 1 meter
.
¡Gracias de antemano por cualquier ayuda!
Saludos, celestialorb.
Android "admite" el uso de plurales mediante el uso de R.plurals que prácticamente no está documentado. Inmersiones en el código fuente revela que deberías poder tener las siguientes versiones posibles de una cadena:
- "cero"
- "uno"
- "pocos" (para exactamente 2)
- "otro" (para 3 y más)
Sin embargo, he descubierto que solo "uno" y "otro" realmente funcionan (¡a pesar de que los otros se usan en la fuente de Android!).
Para usar plurales, quiere declarar cadenas pluralizables de forma similar a los recursos de cadena normales:
<resources>
<plurals name="match">
<!-- Case of one match -->
<item quantity="one">1 match</item>
<!-- Case of several matches -->
<item quantity="other">%d matches</item>
</plurals>
</resources>
Luego, para usarlos realmente en el código, use un código similar al que superfell sugirió anteriormente:
String text = getResources().getQuantityString(R.plurals.match, myIntValue, myIntValue);
myTextView.setText(text);
¡El mismo problema aqui! Supongo que es solo un defecto en la documentación. El método "puro" getQuantitiyString(int, int)
obtiene un recurso de texto, sin ningún formato. Como superfell declaró: simplemente use el getQuantityString(int, int, Object...)
y entregue su valor entero dos veces.
¡Esperaba que esto funcionara de la misma manera que tú, pero simplemente no funciona!
PD: ¿tal vez verifique una respuesta como la correcta? ;-)