Відповіді:
TextView
поважає символ простору Unicode без перерви ( \u00A0
), що було б простішим / легшим рішенням, ніж HTML.
\u00A0
є нерозривним простором, \u0020
не є нерозривним простором
Можна використовувати
для читання рішення. Включення \u00A0
або /  
або в текст насправді не передає багато інформації читачеві вихідного коду (або перекладача з цього питання), якщо ви не пам'ятаєте шістнадцяткові коди. Ось спосіб використання названої сутності в : 
 
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-аналізатор читає їх та замінює під час завантаження файлу, тому сутність не буде присутня в отриманих компільованих ресурсах.
в CharSequence
ресурсах Android Text ( )<!-- 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"
/>
Пристрій та попередній перегляд (попередній перегляд не розпізнає HTML)
в ресурсах 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);
Пристрій та попередній перегляд (попередній перегляд не розпізнає об'єкти, а рядки Java - це буквальний текст!)
Це лише приклади використання об'єктів 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, яка потребує втечі. Сутність - це просто зручність, я просто розміщую її там, щоб продемонструвати, де вона може бути корисною.
у рядках перекладачів є більш значущим, ніж унікод\u00A0
con
і param1
в тому ж файлі.
Одна унікальна ситуація, в яку я зіткнувся, - це додавання нерозривного простору до рядкового ресурсу, який приймав String.format
параметри.
<resources>
<string name="answer_progress" formatted="false">Answered %d of %d</string>
</resources>
Я спробував просто скопіювати і пропустити нерозривний символ пробілу в рядок, і він був замінений на звичайний старий пробіл після компіляції.
Видалення відформатованого = "false" , нумерація аргументів формату та використання позначення зворотної косої риси для мене працювали:
<resources>
<string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string>
</resources>
Це працювало для мене:
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);
}