Estou definindo texto usando setText () da seguinte maneira.
prodNameView.setText("" + name);
prodOriginalPriceView.setText("" + String.format(getString(R.string.string_product_rate_with_ruppe_sign), "" + new BigDecimal(price).setScale(2, RoundingMode.UP)));
Naquele, o primeiro é de uso simples e o segundo é o de definir texto com a formatação do texto.
O Android Studio é muito interessante, usei o Menu Analyze -> Code Cleanup
e recebi sugestões acima de duas linhas como.
Não concatene o texto exibido com setText. Use a cadeia de recursos com espaços reservados. menos ... (Ctrl + F1)
Ao chamar o TextView # setText:
- Nunca chame Number # toString () para formatar números; ele não manipulará os separadores de fração e os dígitos específicos da localidade corretamente. Considere usar o formato String # com especificações de formato adequadas (% d ou% f).
- Não passe uma string literal (por exemplo, "Hello") para exibir o texto. O texto codificado não pode ser traduzido corretamente para outros idiomas. Considere usar seqüências de recursos do Android.
- Não crie mensagens concatenando pedaços de texto. Essas mensagens não podem ser traduzidas corretamente.
O que posso fazer por isso? Qualquer pessoa pode ajudar a explicar o que é e o que devo fazer?
android
concatenation
textview
string-concatenation
Pratik Butani
fonte
fonte
String
para dentrosetText()
. Ex:setText(name)
em vez desetText("" + name)
. Porque se você concatenar o texto, ele não será traduzido como se você usasse o texto codificado como a mensagem notificaNPE
sename
forNULL
name
não éNULL
antes de usar asetText()
função.<string name="string_product_rate_with_ruppe_sign">Something %1$d</string>
E no código java, você faz algo assim:prodOriginalPriceView.setText(getString(R.string.string_product_rate_with_ruppe_sign), price);
(você pode fazer a formatação no arquivo xml: [ developer.android.com/guide/topics/resources/…Respostas:
O recurso possui a versão sobrecarregada de getString, que leva um
varargs
tipoObject
: getString (int, java.lang.Object ...) . Se você configurar corretamente sua string em strings.xml, com os marcadores de posição corretos, poderá usar esta versão para recuperar a versão formatada da sua String final. Por exemplousando
getString(R.string.welcome_message, "Test", 0);
android retornará uma String com
Sobre
setText("" + name);
Seu primeiro exemplo,
prodNameView.setText("" + name);
não faz sentido para mim. O TextView é capaz de manipular valores nulos. Se o nome for nulo, nenhum texto será desenhado.fonte
%1$f
a sua seqüência, em strings.xml e depois chamarsetText(getString(R.string.string_product_rate_with_ruppe_sign, new BigDecimal(price).setScale(2, RoundingMode.UP).floatValue() ));
%1$d
. @ reegan29Não se confunda com % 1 $ s e % 2 $ d na answer.Here aceito é uma informação extra poucos.
Exemplo
Criaremos a seguinte string formatada onde as partes cinzas são inseridas programaticamente.
O seu
string resource
:Faça o
string substitution
seguinte:Nota:
fonte
Encontrei a mesma mensagem de erro de cotão e resolvi-a dessa maneira.
Inicialmente meu código era:
Eu recebi o seguinte erro
Então, eu adicionei isso ao
strings.xml
Qual é o meu inicial "" + um espaço reservado para o meu número (quantidade).
Nota : Minha
quantity
variável foi definida anteriormente e é o que eu queria acrescentar à string. Meu código como resultado foiDepois disso, meu erro foi embora. O comportamento no aplicativo não mudou e minha quantidade continuou a ser exibida como eu queria agora sem um erro de cotão.
fonte
Você deve verificar este tópico e usar um espaço reservado como o dele (não testado)
fonte
Não concatene o texto dentro do seu método setText () , Concatene o que você quiser em uma String e coloque esse valor String dentro do método setText () .
ex: maneira correta
Não concatene dentro de setText () como
fonte
o problema é porque você está anexando
""
no início de cada string.O lint varrerá os argumentos passados
setText
e gerará avisos; no seu caso, o seguinte aviso é relevante:como você está concatenando cada string com
""
.remova essa concatenação, pois os argumentos que você está passando já são texto. Além disso, você pode usar,
.toString()
se necessário, em qualquer outro lugar, em vez de concatenar sua string com""
fonte
Se você não precisar oferecer suporte ao i18n, poderá desativar esta verificação de cotão no Android Studio
Arquivo -> Configurações -> Editor -> Inspeções -> Android -> Lint -> TextView Internationalization (desmarque esta opção)
fonte
Você pode usar isso, funciona para mim
fonte
fonte
Não enlouqueça, é muito simples.
fonte