如何保持空间在结束和/或在字符串的开始?

我必须从我的资源/值文件连接这两个字符串:

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

我是这样做的:

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();

但是第一个字符串结尾和第二个字符串开头的空格 已经消失(当Toast显示时)…

我该怎么办?

我猜答案在这个文档链接

或者类似于使用&amp ;作为“&”字符??

180823 次浏览

我对Android没有特别的想法,但这看起来像通常的XML空白处理-元素中的前导和尾随空白通常被认为是无关紧要的并被删除。试试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>

它不适用于xml:space="preserve"

所以我用了最快的方法=>

我只是在需要的地方加了一个+" "+…

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

如果你真的想用你以前做的方式来做,那么我认为你必须通过转义来告诉它空白是相关的:

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

然而,我将使用字符串格式化来实现这一点。大致如下:

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

然后

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

即使使用字符串格式,有时仍然需要在字符串的开头或结尾使用空格。对于这些情况,使用\转义和xml:space属性都没有帮助。必须使用HTML实体&#160;作为空白。

使用&#160;表示不可分割的空格

.

.

我也遇到了同样的问题。我想在表示屏幕上字段名的资源字符串的末尾留下一个空白。

我找到了这个问题报告的解决方案:https://github.com/iBotPeaches/Apktool/issues/124

这和Duessi提出的观点是一样的。直接在XML中插入\u0020,作为您想保留的空白。

例子:

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

替换是在构建时完成的,因此它不会影响游戏的性能。

这个文档表示引用可以工作:

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

这里所有的答案都不适合我。相反,为了在XML中的字符串末尾添加一个空格,我这样做了

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

有可能有不同宽度的空间:

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

| SPACE | THIN SPACE | HAIR SPACE | no SPACE |

可视化:

enter image description here

可以通过编程方式添加空格。由于这些情况将经常用于串联,我决定停止疯狂,只做旧的+ " " +。我会收集,这些在大多数欧洲语言中是有意义的。

我只是在strings.xml文件中使用UTF代码作为空格“\u0020”。

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

伟大的工作。(Android喜欢UTF代码)

使用""作为字符串资源值。

例子:

<string>"value with spaces"</string>

空格使用\u0020代码。

< p >工作正常 我使用的是\u0020

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

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();

< em >截图 此处显示此代码的工作图像 < / p >

这实际上可能没有回答问题(如何在XML中保留空白),但它可以更优雅地解决底层问题。

不要只依赖XML资源,使用格式字符串进行连接。 因此,首先删除空白

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

然后以不同的方式构建你的字符串:

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();

如果你需要空间用于以后将它与其他字符串连接,那么你可以使用字符串格式化方法,在你的字符串定义中添加参数:

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

然后格式化字符串(例如如果服务器返回错误,否则使用getString(R.string.string_resource_example)):

String message = context.getString(R.string.error_, "Server error message here")

结果是:

Error: Server error message here
这个问题可能很老了,但到目前为止,最简单的方法就是加引号。 例如:< / p >
<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>

还有使用CDATA的解决方案。例子:

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

但总的来说,我认为\u0020已经足够好了。