Answers:
TextView
尊重Unicode不间断空格字符(\u00A0
),这是比HTML更简单/更轻松的解决方案。
可以使用
具有可读性的解决方案。除非您记得十六进制代码,否则在文本中包含\u00A0
or  
或 
/  
并不会真正向源代码的读者(或与此有关的翻译)传达太多信息。这是在中使用命名实体的方法strings.xml
:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY nbsp " "><!-- non-breaking space, U+00A0 -->
]>
<resources>
...
</resources>
这将创建缺少的声明。原始的HTML声明可在https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent中找到,这些XHTML DTD引用了这些内容。所有这些工作正常,因为XML解析器在加载文件时会读取这些内容并进行替换,因此实体不会出现在生成的编译资源中。
Android Text(CharSequence
)中的资源<!-- Defined in <resources> -->
<string name="html_text">Don\'t break <b>this name</b></string>
<!-- Used in a layout -->
<TextView
android:layout_width="130dp"
android:layout_height="wrap_content"
android:background="#10000000"
android:text="@string/html_text"
/>
Android String(格式化)资源中的内容<!-- Defined in <resources> -->
<string name="formatted_text">%1$s is nice</string>
<!-- Used in a layout -->
<TextView
android:layout_width="130dp"
android:layout_height="wrap_content"
android:background="#10000000"
tools:text="@string/formatted_text"
/>
然后在代码中:
String contents = getString(R.string.formatted_text, "Using an ");
((TextView)view.findViewById(android.R.id.text1)).setText(contents);
这些只是DTD实体的示例用法,请根据自己的喜好使用它。
<!ENTITY con "\'"><!-- contraction, otherwise error: "Apostrophe not preceded by \"
Sadly ' cannot be overridden due to XML spec:
https://www.w3.org/TR/xml/#sec-predefined-ent -->
<!ENTITY param1 "%1$s"><!-- format string argument #1 -->
<string name="original">Don\'t wrap %1$s</string>
<string name="with_entities">Don&con;t wrap ¶m1;</string>
’
可以很好地处理角色,无需创建撇号实体。<string name="original">Don’t wrap %1$s</string>
如预期般运作。
'
VS ’
。Android的花哨的Unicode字符没有问题,但ASCII 0x27则存在问题,需要转义。实体只是一种便利,我只是将其放在此处以演示它可能有用的地方。
在琴弦的方式更有意义的翻译比unicode的\u00A0
con
和param1
。
我遇到的一种独特情况是在使用String.format
参数的字符串资源中添加不间断空格。
<resources>
<string name="answer_progress" formatted="false">Answered %d of %d</string>
</resources>
我试图简单地将不间断空格字符复制并粘贴到字符串中,并在编译后将其替换为常规的旧空格。
删除formatted =“ false”,为格式args编号并使用反斜杠符号对我有用:
<resources>
<string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string>
</resources>