Android и в TextView - PullRequest
       6

Android и в TextView

92 голосов
/ 03 июля 2011

возможно ли добавить   в TextView?Кто-нибудь достиг подобной функциональности?

Я хочу иметь неразрывный пробел в TextView.

Ответы [ 7 ]

158 голосов
/ 03 июля 2011

Я не пробовал это сделать, чтобы убедиться, что он действительно работает, но в идеальном мире TextView должен учитывать символ пробела Unicode без пробелов (\u00A0), который был быболее простое / легкое решение, чем HTML.

20 голосов
/ 14 июля 2011

\u00A0 - неразрывный пробел, \u0020 - неразрывный пробел

18 голосов
/ 17 апреля 2016

Можно использовать  , чтобы получить удобочитаемое решение. Включение \u00A0 или   или   /   в тексте на самом деле не передает много информациичитатель исходного кода (или переводчик в этом отношении), если вы не помните шестнадцатеричные коды.Вот способ использования именованного объекта в strings.xml:

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

Это создаст отсутствующее объявление.Исходное объявление HTML можно найти в https://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent, на который ссылаются обычные XHTML DTD .Все это работает, потому что синтаксический анализатор XML читает их и подставляет при загрузке файла, поэтому сущность не будет присутствовать в результирующих скомпилированных ресурсах.

&nbsp; в ресурсах Android Text (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 on device HTML in preview

&nbsp; inСтрока Android (в формате) Ресурсы

<!-- 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);

Устройство и предварительный просмотр (предварительный просмотр не распознает объекты, а строки Java являются буквальным текстом!)
formatted on device formatted in preview

Дальнейшие уловки

Это просто примеры использования сущностей 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>

Они оба помогают выделить: highlighted XML entities

18 голосов
/ 26 сентября 2014

TextView должен учитывать неразрывный пробел

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

или

new TextView("Hello\u00A0world");
2 голосов
/ 09 октября 2015

Одна уникальная ситуация, с которой я столкнулся, - это добавление неразрывного пробела к строковому ресурсу, который принимал String.format параметров.

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

Я попытался просто скопировать и вставить неразрывный пробел в строку, и после компиляции он был заменен обычным старым пробелом.

Удаление formatted = "false" , нумерация аргументов формата и использование обратной косой черты работали для меня:

<resources>
    <string name="answer_progress">Answered %1$d\u00A0of\u00A0%2$d</string>
</resources>
1 голос
/ 04 июля 2011

Это пример использования nbsp в TextView

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

0 голосов
/ 08 июля 2017

Это сработало для меня:

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...