strings - Símbolo de porcentaje de Android XML
resources android (14)
En su archivo strings.xml puede usar cualquier signo de Unicode que desee.
Por ejemplo, el número Unicode para el signo de porcentaje es 0025:
<string name="percent_sign">%</string>
Puedes ver una lista completa de las señales de Unicode here
Tengo una serie de cadenas en las que se utiliza el símbolo %
. El formato adecuado para usar el %
es %
. Cuando tengo una cadena en esa matriz con múltiples %
me da este error
Multiple annotations found at this
line:
- error: Multiple substitutions specified in non-positional format;
did you mean to add the formatted="false" attribute?
- error: Found tag </item> where </string-array> is expected
Este podría ser el caso de que el IDE sea demasiado estricto.
La idea es sólida, en general, debe especificar el orden de las variables de sustitución, de modo que si agrega recursos para otro idioma, no será necesario cambiar su código Java. Sin embargo, hay dos problemas con esto:
En primer lugar, una cadena como:
You will need %.5G %s
para ser utilizado ya que necesitará 2.1200 mg tendrá el mismo orden en cualquier idioma, ya que esa cantidad de masa siempre se representa en ese orden científicamente.
La segunda es que si coloca el orden de las variables en el idioma en el que se especifican los recursos predeterminados (por ejemplo, inglés), solo necesita especificar las posiciones en las cadenas de recursos para los idiomas; para ello, utilice un orden diferente al de su idioma predeterminado.
La buena noticia es que esto es fácil de arreglar. Aunque no es necesario especificar las posiciones, y el IDE está siendo demasiado estricto, solo especifíquelos de todos modos. Para el ejemplo anterior use:
Necesitará% 1 $ .5G% 2 $ s
Intenta usar una barra invertida delante de ella, como a continuación:
/%
La herramienta de empaquetado de activos de Android ( aapt
) se ha vuelto muy estricta en su último lanzamiento y ahora se usa para todas las versiones de Android. El error aapt que está recibiendo se genera porque ya no permite especificadores de formato no posicionales .
Aquí hay algunas ideas de cómo puede incluir el símbolo% en sus cadenas de recursos.
Si no necesita ningún especificador de formato o sustituciones en su cadena, simplemente puede utilizar el atributo formatted
y establecerlo en false
:
<string formatted="false">%a + %a == 2%a</string>
En este caso, la cadena no se usa como una cadena de formato para el Formatter
por lo que no tiene que escapar de sus% -symbols. La cadena resultante es "% a +% a == 2% a".
Si omite el atributo formatted="false"
, la cadena se usa como una cadena de formato y tiene que escapar de los símbolos-%. Esto se hace correctamente con doble%:
<string>%%a + %%a == 2%%a</string>
Ahora aapt
no le da errores, pero dependiendo de cómo lo use, la cadena resultante puede ser "%% a + %% a == 2 %% a" si se invoca un Formatter
sin ningún argumento de formato:
Resources res = context.getResources();
String s1 = res.getString(R.string.str);
// s1 == "%%a + %%a == 2%%a"
String s2 = res.getString(R.string.str, null);
// s2 == "%a + %a == 2%a"
Sin ningún xml ni código, es difícil decir cuál es exactamente tu problema, pero espero que esto te ayude a entender un poco mejor los mecanismos.
No es exactamente tu problema, sino uno similar.
Si tiene más de un formato en su entrada de cadena, no debe usar "% s" varias veces.
NO HACER:
<string name="entry">Planned time %s - %s (%s)</string>
HACER:
<string name="entry">Planned time %1$s - %2$s (%3$s)</string>
Para permitir que la aplicación use cadenas formateadas de recursos, debe corregir su xml. Así por ejemplo
<string name="app_name">Your App name, ver.%d</string>
debe ser reemplazado con
<string name="app_name">Your App name, ver.%1$d</string>
Puedes ver esto para más detalles.
Prueba este (a la derecha):
<string name="content" formatted="false">Great application %s ☞ %s ☞ %s //n//nGo to download this application %s</string>
Puede eliminar el% en xml con %%, pero necesita configurar el texto en código, no en xml de diseño.
Puede escapar% usando %% para el analizador XML, pero se muestra dos veces en el dispositivo.
Para mostrarlo una vez, intente el siguiente formato: /%%
Por ejemplo
<string name="zone_50">Fat Burning (50/%% to 60/%%)</string>
se muestra como Fat Burning (50% to 60%)
en el dispositivo
Según la documentación oficial de Google, use% 1 $ sy% 2 $ s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling
Hola,% 1 $ s! Tienes% 2 $ d nuevos mensajes.
Supongamos que desea mostrar (50% de DESCUENTO) e ingrese 50 en tiempo de ejecución. Aquí está el código:
<string name="format_discount"> (
<xliff:g id="discount">%1$s</xliff:g>
<xliff:g id="percentage_sign">%2$s</xliff:g>
OFF)</string>
En la clase java usa este código:
String formattedString=String.format(context.getString(R.string.format_discount),discountString,"%");
holder1.mTextViewDiscount.setText(formattedString);
Un método complicado: usar el signo de porcentaje pequeño como se muestra a continuación
<string name="zone_50">Fat Burning (50﹪ to 60﹪)</string>
Utilizar
<string name="win_percentage">%d%% wins</string>
Llegar
80% wins
como una cadena formateada.
Estoy usando el método String.format()
para insertar el número en lugar de %d
.
para escapar del símbolo de porcentaje, solo necesitas %%
por ejemplo :
String.format("%1$d%%", 10)
devuelve "10%"