我必须从我的资源/值文件中连接这两个字符串:
<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 时)......
我应该怎么办 ?
我想答案就在这个documentation link中的某个地方
还是类似于将 & ;
用于“&”特点 ??
即使您使用字符串格式,有时您仍然需要在字符串的开头或结尾处使用空格。对于这些情况,使用 \
转义和 xml:space
属性都没有帮助。您必须使用 HTML 实体  
作为空格。
将  
用于不可破坏的空格。
将  
用于常规空格。
我遇到了同样的问题。我想在代表屏幕字段名称的资源字符串末尾留一个空白。
我在此问题报告中找到了解决方案:https://github.com/iBotPeaches/Apktool/issues/124
这与杜西建议的想法相同。直接在 XML 中插入 \u0020
以获得您想要保留的空白。
例子 :
<string name="your_id">Score :\u0020</string>
替换是在构建时完成的,因此不会影响游戏的性能。
\u0020
是 ASCII 码的空格。这是我项目的最佳选择,因为我必须确保它是 ASCII。
此 documentation 建议引用将起作用:
<string name="my_str_spaces">" Before and after? "</string>
<string name="my_str_spaces">" Before <b>and</b> after? "</string>
Enclose the entire string in double quotes ("This'll work", for example)
,它讨论了转义 Single quote (')
。
我只是在 strings.xml 文件中使用空间“\u0020”的 UTF 代码。
<string name="some_string">\u0020The name of my string.\u0020\u0020</string>
效果很好。 (Android 喜欢 UTF 代码)
这个问题可能很老,但到目前为止,最简单的方法是添加引号。例如:
<string name="Toast_Memory_GameWon_part1">"you found ALL PAIRS ! on "</string>
<string name="Toast_Memory_GameWon_part2">" flips !"</string>
可以有不同宽度的空间:
<string name="space_demo">| | | ||</string>
|空间 |薄空间 |头发空间 |没有空间 |
可视化:
https://i.stack.imgur.com/QJeF4.png
将 ""
与字符串资源值一起使用。
例子 :
<string>"value with spaces"</string>
或者
对空格使用 \u0020
代码。
如果您真的想按照自己的方式进行操作,那么我认为您必须通过转义来告诉它空格是相关的:
<string name="Toast_Memory_GameWon_part1">you found ALL PAIRS ! on\ </string>
<string name="Toast_Memory_GameWon_part2">\ flips !</string>
但是,我会为此使用 string formatting。类似于以下内容:
<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);
String.format
会导致许多在游戏中不受欢迎的内存分配。
运行良好,我正在使用 \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();
屏幕截图 here Image of Showing Working of this code
这里的所有答案都对我不起作用。相反,为了在 XML
中的字符串末尾添加一个空格,我这样做了
<string name="more_store">more store<b> </b> </string>
可以进行参数以编程方式添加空间。由于这些情况将经常用于连接,我决定停止疯狂,只做旧的+ " " +
。这些在大多数欧洲语言中都是有意义的,我想。
我不特别了解 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
似乎被忽略了。
这实际上可能无法回答问题(如何在 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();
还有使用CDATA
的解决方案。例子:
<string name="test"><![CDATA[Hello world]]></string>
但总的来说,我认为 \u0020
已经足够好了。
如果您需要空间以便稍后将其与其他字符串连接,那么您可以使用字符串格式化方法将参数添加到您的字符串定义:
<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
它不适用于 xml:space="preserve"
所以我以最快的方式做到了 =>
我只是在需要的地方添加了一个 +" "+ ...
String message_all_pairs_found = getString(R.string.Toast_Memory_GameWon_part1)+" "+total_flips+" "+getString(R.string.Toast_Memory_GameWon_part2);
 
,并且没有出现构建错误,但我的空间仍然被忽略。 
有效,但我不想要一个不可破坏的空格。我想要一个普通的空间。\u0020
工作。