Pergunta

Eu tenho que concatenar essas duas strings dos meus arquivos de recurso/valor:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2"> flips !</string>

Eu faço assim:

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+total_flips+getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

Mas os espaços no final da primeira corda e no início da segunda sequência desapareceram (quando a torrada é mostrada) ...

O que devo fazer ?

Eu acho que a resposta está em algum lugar aqui neste link de documentação

ou é algo como usar &amp ; para o caractere "&" ??

Foi útil?

Solução

Mesmo se você usar a formatação da string, às vezes ainda precisa de espaços brancos no início ou no final da sua corda. Para esses casos, nem escapando com \, nem xml:space atributo ajuda. Você deve usar entidade html &#160; Para um espaço em branco.

Usar &#160; para espaço em branco não invasor.
Usar &#032; para espaço regular.

Outras dicas

Eu tive o mesmo problema. Eu queria deixar um espaço em branco no final de uma sequência de recursos representando um nome de campo na tela.

Encontrei uma solução neste relatório de edição: https://github.com/ibotpeaches/apktool/issues/124

Esta é a mesma ideia que Duessi sugere. Inserir \u0020 Diretamente no XML para um espaço em branco que você gostaria de preservar.

Exemplo :

<string name="your_id">Score :\u0020</string>

A substituição é feita no momento da construção, portanto, não afetará o desempenho do seu jogo.

este documentação sugere que citar vai funcionar:

<string name="my_str_spaces">" Before and after? "</string>

Acabei de usar o código UTF para o espaço " u0020" no arquivo strings.xml.

<string name="some_string">\u0020The name of my string.\u0020\u0020</string>

funciona bem. (Android adora códigos UTF)

Essa questão pode ser antiga, mas a partir de agora a maneira mais fácil de fazer isso é adicionar aspas. Por exemplo:

<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>

Há possível espaço com diferentes larguras:

<string name="space_demo">|&#x20;|&#x2009;|&#x200A;||</string>

| Espaço | Espaço fino | Espaço para o cabelo | Sem espaço |

Visualização:

enter image description here

Se você realmente quer fazer isso da maneira que estava fazendo, acho que precisa dizer que o espaço em branco é relevante ao escapar:

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>

No entanto, eu usaria formatação de string por esta. Algo como o seguinte:

<string name="Toast_Memory_GameWon">you found ALL PAIRS ! on %d flips !</string>

então

String message_all_pairs_found = String.format(getString(R.string.Toast_Memory_GameWon), total_flips);

Use "" com o valor do recurso String.

Exemplo: "Valor com espaços"

OU

Use o código u0020 para espaços.

Trabalhando bem, estou usando u0020

<string name="hi"> Hi \u0020 </string>
<string name="ten"> \u0020 out of 10  </string>
<string name="youHaveScored">\u0020 you have Scored \u0020</string>

Arquivo java

String finalScore = getString(R.string.hi) +name+ getString(R.string.youHaveScored)+score+ getString(R.string.ten);
               Toast.makeText(getApplicationContext(),finalScore,Toast.LENGTH_LONG).show();

Captura de tela Aqui a imagem de mostrar o trabalho deste código

Todas as respostas aqui não funcionaram para mim. Em vez disso, para adicionar um espaço no final de uma corda em XML eu fiz isso

<string name="more_store">more store<b> </b> </string>

Um argumento pode ser feito para adicionar o espaço programaticamente.Como esses casos serão frequentemente usados ​​em concatenações, decidi parar com a loucura e apenas fazer o antigo + " " +.Isso fará sentido em maioria Línguas europeias, eu diria.

Não tenho idéia do Android em particular, mas isso parece o manuseio usual do XML Whitespace - liderando e arrastando espaço em branco dentro de um elemento geralmente é considerado insignificante e removido. Tentar xml:space:

<string name="Toast_Memory_GameWon_part1" xml:space="preserve">you found ALL PAIRS ! on </string>
<string name="Toast_Memory_GameWon_part2" xml:space="preserve"> flips !</string>

Isso pode realmente não responder à pergunta (como manter os espaços em branco no XML), mas pode resolver o problema subjacente de maneira mais graciosa.

Em vez de confiar apenas nos recursos XML, concatenar usando seqüências de formato. Então, primeiro remova os espaços em branco

<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on</string>
<string name="Toast_Memory_GameWon_part2">flips !</string>

E então construa sua string de maneira diferente:

String message_all_pairs_found = 
      String.format(Locale.getDefault(), 
                    "%s %d %s", 
                    getString(R.string.Toast_Memory_GameWon_part1),
                    total_flips,
                    getString(R.string.Toast_Memory_GameWon_part2);

Toast.makeText(this, message_all_pairs_found, 1000).show();

Há também a solução de usar CDATA. Exemplo:

<string name="test"><![CDATA[Hello          world]]></string>

Mas em geral eu acho \u0020 é bom o suficiente.

Se você precisar do espaço para fins de concatená -lo posterior com outras strings, poderá usar a abordagem de formatação da string de adicionar argumentos à sua definição de string:

<string name="error_">Error: %s</string>

Em seguida, formate a string como:

String message = context.getString(R.string.error_, "Something went wrong")

Não funciona com xml: space = "preserve"

Então eu fiz da maneira mais rápida =>

Eu simplesmente adicionei um + "" + onde eu precisava ...

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top