Eu tenho uma matriz de seqüências de caracteres em que o %
símbolo é usado. Formato adequado para usar o %
is %
. Quando eu tenho uma string nessa matriz com várias, %
isso me dá esse erro.
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
Respostas:
A Ferramenta de empacotamento de ativos Android (
aapt
) tornou-se muito rigorosa em sua versão mais recente e agora é usada para todas as versões do Android. O erro aapt que você está recebendo é gerado porque não permite mais especificadores de formato não posicionais .Aqui estão algumas idéias de como você pode incluir o símbolo% em suas sequências de recursos.
Se você não precisar de nenhum especificador ou substituição de formato em sua string, basta usar o
formatted
atributo e configurá-lo parafalse
:Nesse caso, a string não é usada como uma string de formato para
Formatter
que você não precise escapar dos% -symbols. A sequência resultante é "% a +% a == 2% a".Se você omitir o
formatted="false"
atributo, a sequência será usada como uma sequência de formatação e você precisará escapar dos% -symbols. Isso é feito corretamente com o dobro de%:Agora
aapt
não há erros, mas dependendo de como você a usa, a sequência resultante pode ser "%% a + %% a == 2 %% a" se aFormatter
for chamada sem nenhum argumento de formato :Sem nenhum código e xml, é difícil dizer qual é exatamente o seu problema, mas espero que isso ajude você a entender um pouco melhor os mecanismos.
fonte
Para permitir que o aplicativo use seqüências de caracteres formatadas de recursos, você deve corrigir seu xml. Então, por exemplo
deve ser substituído por
Você pode ver isso para detalhes.
fonte
%1$s
,%2$s
etc.Você pode escapar% usando %% para analisador XML, mas é mostrado duas vezes no dispositivo.
Para mostrá-lo uma vez, tente o seguinte formato:
\%%
Por exemplo
é mostrado como
Fat Burning (50% to 60%)
no dispositivofonte
Usar
<string name="win_percentage">%d%% wins</string>
para obter
80% wins
como uma sequência formatada.Estou usando o
String.format()
método para obter o número inserido em vez de%d
.fonte
No seu arquivo strings.xml, você pode usar qualquer sinal Unicode desejado.
Por exemplo, o número Unicode para o sinal de porcentagem é 0025:
Você pode ver uma lista abrangente de sinais Unicode aqui
fonte
%
caractere retorna. Receio que isso não resolva o problema.para escapar do símbolo de porcentagem, você só precisa de %%
por exemplo :
retorna "10%"
fonte
10%
não retorna%10
. FIY: Ao usar,String.format
você deve especificar sempre o Local. Pode ser realmente surpreso quando você não colocar Locale e utilizar locale árabe para formatar números ...Não é exatamente o seu problema, mas um problema semelhante.
Se você tiver mais de uma formatação em sua entrada de string, não deverá usar "% s" várias vezes.
NÃO:
FAZ :
fonte
Você pode escapar do% em xml com %%, mas precisa definir o texto no código, não no layout xml.
fonte
Pode ser que o IDE se torne muito rígido.
A ideia é boa: em geral, você deve especificar a ordem das variáveis de substituição para adicionar recursos para outro idioma, seu código java não precisará ser alterado. No entanto, existem dois problemas com isso:
Em primeiro lugar, uma sequência como:
para ser usado como Você precisará de 2.1200 mg e terá a mesma ordem em qualquer idioma, pois essa quantidade de massa é sempre representada cientificamente nessa ordem.
A segunda é que, se você colocar a ordem das variáveis em qualquer idioma em que seus recursos padrão forem especificados (por exemplo, inglês), precisará especificar apenas as posições nas cadeias de recursos para idiomas e usar uma ordem diferente para o idioma padrão.
A boa notícia é que isso é simples de corrigir. Mesmo que não seja necessário especificar as posições e o IDE estar sendo excessivamente rigoroso, apenas especifique-as de qualquer maneira. Para o exemplo acima, use:
fonte
Um método complicado: usar um pequeno sinal de porcentagem como abaixo
Porcentagem na Wikipedia
fonte
Tente este (à direita):
fonte
De acordo com a documentação oficial do Google, use% 1 $ se% 2 $ s http://developer.android.com/guide/topics/resources/string-resource.html#FormattingAndStyling
Olá,% 1 $ s! Você tem% 2 $ d novas mensagens.
fonte
Suponha que você queira mostrar (50% OFF) e insira 50 no tempo de execução. Aqui está o código:
Na classe java, use este código:
fonte
Tente usar uma barra invertida na frente, como abaixo:
fonte