387

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

<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 ;“&”字符?

4

16 回答 16

549

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

用于&#160;不可破坏的空白。
用于&#032;常规空间。

于 2010-02-05T11:05:34.840 回答
518

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

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

这与杜西建议的想法相同。直接在 XML 中插入\u0020您想要保留的空白。

例子 :

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

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

于 2010-10-05T08:40:53.757 回答
151

文档建议引用将起作用:

<string name="my_str_spaces">" Before and after? "</string>
于 2011-03-17T17:41:17.830 回答
40

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

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

效果很好。(Android 喜欢 UTF 代码)

于 2016-10-24T06:24:35.053 回答
29

这个问题可能很老,但到目前为止,最简单的方法是添加引号。例如:

<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>
于 2018-07-21T03:28:05.443 回答
13

可以有不同宽度的空间:

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

| 空间 | 薄空间 | 头发空间 | 没有空间 |

可视化:

在此处输入图像描述

于 2016-03-14T15:52:04.327 回答
9

""与字符串资源值一起使用。

例子 :

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

或者

使用\u0020空格的代码。

于 2017-06-21T06:40:25.367 回答
8

如果您真的想按照自己的方式进行操作,那么我认为您必须通过转义来告诉它空格是相关的:

<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);
于 2009-10-19T20:22:19.243 回答
6

运行良好,我正在使用 \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();

此处的屏幕截图 显示此代码工作的图像

于 2018-05-14T17:05:31.960 回答
2

这里的所有答案都对我不起作用。相反,要在我的字符串末尾添加一个空格,XML我这样做了

<string name="more_store">more store<b> </b> </string>
于 2013-11-23T04:45:56.177 回答
2

可以进行参数以编程方式添加空间。由于这些情况将经常用于连接,我决定停止疯狂,只做旧的+ " " +. 我想这些在大多数欧洲语言中都是有意义的。

于 2016-04-11T16:33:41.067 回答
1

我不特别了解 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>
于 2009-10-19T05:18:31.910 回答
0

这实际上可能无法回答问题(如何在 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();
于 2018-05-29T09:58:38.673 回答
0

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

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

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

于 2019-06-03T07:04:11.860 回答
-1

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

<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
于 2018-06-25T02:39:21.597 回答
-6

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

所以我以最快的方式做到了 =>

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

String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);
于 2009-10-19T05:45:30.357 回答