Можно ли добавить
в TextView? Кто-нибудь добился аналогичной функциональности?
Я хочу иметь непрозрачное пространство в TextView.
Можно ли добавить
в TextView? Кто-нибудь добился аналогичной функциональности?
Я хочу иметь непрозрачное пространство в TextView.
Я не пробовал это, чтобы убедиться, что он действительно работает, но в идеальном мире TextView
должен уважать символ Unicode no-break space (\u00A0
), что было бы более простым и легким решением, чем HTML.
\u00A0
- неразрывное пространство, \u0020
не является неразрывным пространством
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 DTD. Все это работает, поскольку анализатор 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>
Я попытался просто скопировать и пропустить неразрывный символ пробела в строку, и после компиляции он был заменен обычным старым пространством.
Удаление форматированного = "false", нумерация аргументов формата и использование обратной косой черты для меня:
<resources>
<string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string>
</resources>
Это пример использования nbsp в TextView
<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);
}