Tengo una serie de cadenas en las que %
se usa el símbolo. Formato adecuado para usar el %
is %
. 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
Respuestas:
Android Asset Packaging Tool (
aapt
) se ha vuelto muy estricta en su última versión 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 sobre 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 hacer uso del
formatted
atributo y establecerlo enfalse
:En este caso, la cadena no se usa como una cadena de formato para
Formatter
que no tenga que escapar de sus% -symbols. La cadena resultante es "% a +% a == 2% a".Si omite el
formatted="false"
atributo, la cadena se usa como una cadena de formato y debe escapar de los símbolos%. Esto se hace correctamente con double-%:Ahora
aapt
no le da errores, pero dependiendo de cómo lo use, la cadena resultante puede ser "%% a + %% a == 2 %% a" siFormatter
se invoca sin ningún argumento de formato :Sin ningún código y xml es difícil decir cuál es exactamente su problema, pero espero que esto lo ayude a comprender un poco mejor los mecanismos.
fuente
Para permitir que la aplicación use cadenas formateadas de recursos, debe corregir su xml. Así por ejemplo
debe ser reemplazado con
Puedes ver esto para más detalles.
fuente
%1$s
,%2$s
etc.Puede escapar% usando %% para el analizador XML, pero se muestra dos veces en el dispositivo.
Para mostrarlo una vez, intente con el siguiente formato:
\%%
Por ejemplo
se muestra como
Fat Burning (50% to 60%)
en el dispositivofuente
Utilizar
<string name="win_percentage">%d%% wins</string>
Llegar
80% wins
como una cadena formateadaEstoy usando el
String.format()
método para obtener el número insertado en lugar de%d
.fuente
En su archivo strings.xml puede usar cualquier signo Unicode que desee.
Por ejemplo, el número Unicode para el signo de porcentaje es 0025:
Puede ver una lista completa de signos Unicode aquí
fuente
%
carácter vuelve. Me temo que esto no resuelve el problema.para escapar del símbolo de porcentaje, solo necesita %%
por ejemplo :
devuelve "10%"
fuente
10%
no%10
. FIY: cuando lo uses,String.format
siempre debes especificar Locale. Puede ser realmente sorprendido cuando usted no pone Idioma y utiliza la configuración regional árabe para formatear números ...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:
Hacer:
fuente
Puede escapar del% en xml con %%, pero necesita establecer el texto en código, no en el diseño xml.
fuente
Este podría ser un caso de que el IDE se vuelva demasiado estricto.
La idea es sólida, en general, debe especificar el orden de las variables de sustitución para que, si agrega recursos para otro idioma, no sea necesario cambiar su código Java. Sin embargo, hay dos problemas con esto:
En primer lugar, una cadena como:
para ser utilizado ya que necesitará 2.1200 mg tendrá el mismo orden en cualquier idioma ya que esa cantidad de masa siempre está representada científicamente en ese orden.
El segundo es que si coloca el orden de las variables en cualquier idioma en el que se especifiquen sus recursos predeterminados (p. Ej., Inglés), entonces solo necesita especificar las posiciones en las cadenas de recursos para los idiomas; use un orden diferente al idioma predeterminado.
La buena noticia es que esto es fácil de solucionar. Aunque no es necesario especificar las posiciones y el IDE es demasiado estricto, solo especifíquelas de todos modos. Para el ejemplo anterior use:
fuente
Un método complicado: usar un pequeño signo de porcentaje como se muestra a continuación
Signo de porcentaje en Wikipedia
fuente
Prueba este (a la derecha):
fuente
Según la documentación oficial de Google, use% 1 $ s y% 2 $ s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling
Hola,% 1 $ s! Tienes% 2 $ d mensajes nuevos.
fuente
Suponga que desea mostrar (50% de descuento) e ingresar 50 en tiempo de ejecución. Aquí está el código:
En la clase java use este código:
fuente
Intente usar una barra invertida frente a ella, como a continuación:
fuente