Android: преобразование между строками, SpannedStrings и Spannablestrings

У меня есть строковый ресурс под названием «foo». Это может быть простая строка ... или она может содержать HTML. Это может измениться со временем: я должен иметь возможность поместить его как минимум как SpannableString сразу после прочтения, HTML это или нет (, но как ?? )

Я хочу получить этот необработанный CharSequence и сначала иметь возможность отображать его как есть (точные символы, а не "интерпретация" Android). Прямо сейчас я не могу этого сделать ... toString () решает вырезать части, которые, по его мнению, я не хочу видеть.

Затем я хотел бы иметь возможность создать SpannableString из этой и других строк или SpannableStrings посредством конкатенации с использованием какого-либо метода (ни один из обычных не работает). Затем я хотел бы использовать эту SpannableString для отображения текста в формате HTML в TextView.

Это не должно быть сложно, но очевидно, что я делаю это неправильно (пока что я нашел очень мало информации об этом). Конечно, есть способ точного взаимного преобразования между строками, SpannedStrings и даже Spannablestrings без потери разметки по пути?

Обратите внимание, что я уже играл с несколько неработающим Linkify, но мне нужен лучший контроль над процесс (никаких болтающихся неформатированных символов "/", правильных hrefs и т. д.Я могу заставить все это работать, ЕСЛИ я остаюсь в HTML на всех этапах, хотя я не могу ничего связать.

Редактировать 1: Я узнал, что могу использовать следующее, чтобы всегда получать необработанную строку (вместо того, что Android решит, что CharSequence действительно есть). Хорошо ... теперь, как преобразовать это в SpannableString?

<string name="foo"><![CDATA[
    <b>Some bold</b>
]]>
</string>

Редактировать 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? Это кажется запутанным (но не таким запутанным, как никогда не знать, какой будет тип ресурса ... String, Spannable и т. Д.)

22
задан MartyMacGyver 26 October 2011 в 07:26
поделиться