Android: преобразование между строками, SpannedStrings и Spannablestrings
у меня есть строковый ресурс под названием "фу". Это может быть простая строка... или он может содержать HTML. Это может измениться со временем: я должен быть в состоянии упаковать его как минимум SpannableString сразу после чтения, будь то HTML или нет (но как??)
Я хочу получить этот raw CharSequence и сначала иметь возможность отображать его как есть (точные символы, а не "интерпретацию" Android). Сейчас я не могу этого сделать... toString () решает вырвать части, которые он не думаю, что хочу это видеть.
затем я хотел бы иметь возможность создавать SpannableString из этой и других строк или SpannableStrings через конкатенацию, используя некоторый метод (ни один из нормальных не работает). Затем я хотел бы использовать этот SpannableString для отображения текста в формате HTML в TextView.
это не должно быть сложно, но, очевидно, я не делаю это правильно (там очень мало информации об этом, что я нашел до сих пор). конечно, есть способ точно interconvert между между струнами, SpannedStrings и даже Spannablestrings, не теряя наценки по пути?
обратите внимание, что я уже играл с несколько сломанной Linkify, но я хочу лучше контролировать процесс (без болтающихся неформатированных "/"s, правильных hrefs и т. д.) Я могу заставить все это работать, если я останусь в HTML на всех шагах, хотя я ничего не могу объединить.
Edit 1: я узнал, что могу использовать следующее, Чтобы всегда моя сырая строка (вместо того, что Android решает, что он думает, что CharSequence действительно есть). Милый... теперь, как уговорить это в SpannableString?
<string name="foo"><![CDATA[
<b>Some bold</b>
]]>
</string>
Edit 2:не уверен, почему это не сработало раньше, но... если foo1 и foo2-строки, помеченные как выше (как CDATA), то, по-видимому, можно сделать следующее:
String foo1 = (String)getResources().getText(R.string.foo1);
String foo2 = (String)getResources().getText(R.string.foo2);
SpannedString bar = new SpannedString(Html.fromHtml(foo1+foo2));
любопытно: есть ли более простое решение, чем это? Действительно ли этот бизнес CDATA необходим? Это кажется запутанным (но не так, как запутанный, как никогда, не зная, каким будет тип ресурса... Строка, Spannable, etc.)
2 ответов
у меня была та же проблема. Существует два решения в соответствии с Google API руководства.
первый-бежать <
знаком с <
в строке ресурса. К сожалению, String
преобразование удаляет тег в фоновом режиме.
во-вторых, использовать строки формата вместо тегов XML/HTML. Это кажется проще, быстрее, и уклоняется от скрытых проблем преобразования. getString(resource, ...)
работы как printf(string, ...)
здесь.
оба работают и требуют некоторого кода для замените заданную часть строки в любом случае (обработайте теги или строки формата). Наслаждайтесь! =)