7 ответов:
Я не пробовал это, чтобы убедиться, что он действительно работает, но в идеальном мире
TextViewдолжны уважать Юникод неразрывный пробел (\u00A0), что было бы более простым/легким решением, чем HTML.
TextView должен уважать неразрывное пространство
<string name="test">Hello world</string>или
new TextView("Hello\u00A0world");
можно использовать
чтобы прочитать решение. в том числе\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 DTDs. Все это работает, потому что синтаксический анализатор XML читает их и заменяет при загрузке файла, поэтому сущность не будет присутствовать в результирующих скомпилированных ресурсах.
в Android текста (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" />устройство и предварительный просмотр (предварительный просмотр не распознает 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.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>
это сработало для меня:
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); }





Comments