Android和  在TextView中

是否可以添加  在TextView中? 有没有人获得类似的function?

我想在TextView中有非易碎空间。

我没有尝试过,以确保它实际上工作,但在一个理想的世界TextView应该尊重Unicode \u00A0 空格字符 ( \u00A0 ),这将是一个比HTML更简单/更轻的解决scheme。

\u00A0是一个非破空间,并非一个不破的空间

TextView应该尊重非破坏性的空间

 <string name="test">Hello&#160;world</string> 

要么

 new TextView("Hello\u00A0world"); 

有可能使用&nbsp; 有一个可读的解决scheme。 包括\u00A0或者&#160; 或者&#xa0; / &#x00a0; 在文本中并没有真正向源代码的读者(或者翻译者)传达很多信息,除非你记得hex代码。 以下是在strings.xml使用命名实体的一种方法:

 <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE resources [ <!ENTITY nbsp "&#160;"><!-- non-breaking space, U+00A0 --> ]> <resources> ... </resources> 

这将创build失踪的声明。 最初的HTML声明可以在通常的XHTML DTD引用的https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent中find。; 所有这些都是有效的,因为XMLparsing器读取这些文件并在加载文件时进行replace,所以实体将不会出现在所生成的编译资源中。

&nbsp; 在Android文本( CharSequence )资源

 <!-- Defined in <resources> --> <string name="html_text">Don\'t break <b>this&nbsp;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" /> 

设备和预览(预览不识别HTML)
设备上的HTML HTML中的预览

&nbsp; 在Android的string(格式)资源

 <!-- Defined in <resources> --> <string name="formatted_text">%1$s is&nbsp;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 &nbsp;"); ((TextView)view.findViewById(android.R.id.text1)).setText(contents); 

设备和预览(预览不识别实体,Javastring是文本文本!)
在设备上格式化 在预览中格式化

更多的技巧

这些只是DTD实体的示例用法,根据您自己的偏好使用它。

 <!ENTITY con "\&apos;"><!-- contraction, otherwise error: "Apostrophe not preceded by \" Sadly &apos; cannot be overridden due to XML spec: https://www.w3.org/TR/xml/#sec-predefined-ent --> <!ENTITY param1 "&#37;1$s"><!-- format string argument #1 --> <string name="original">Don\'t wrap %1$s</string> <string name="with_entities">Don&con;t wrap &param1;</string> 

他们都帮助强调: 高亮的XML实体

我碰到的一个独特的情况是添加一个非破坏性的空间到String.format参数的string资源。

 <resources> <string name="answer_progress" formatted="false">Answered %d of %d</string> </resources> 

我试图简单地复制并将非空格字符复制到string中,并在编译之后将其replace为普通的旧空格。

删除格式=“假” ,编号格式参数和使用反斜杠符号为我工作:

 <resources> <string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string> </resources> 

这是一个在TextView中使用nbsp的例子

<string name="text">Example:\u00A0</string>

这对我工作:

 if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N) { textview.setText(Html.fromHtml(your string, Html.FROM_HTML_MODE_LEGACY)); } else { textview.setText(Html.fromHtml(your string); }