Я борюсь с использованием текстового объекта EditText и Spannable. В эти дни я читал документы API примерно десять раз, даже я не уверен, что правильно понимаю. Поэтому я ищу пример, который показывает мне, как использовать EditText и Spannable.
Есть ли пример с текстом Spanned и Spannable?
Ответ 1
Поскольку вы не укажете, что вы не можете понять из API, сложно ответить на ваши вопросы (короткий ответ: перепишите свой вопрос на конкретные вопросы, а не на общий).
Типичный пример Spannable - это что-то вроде этого, чтобы превратить выделенный текст в EditText в Italic:
Spannable str = mBodyText.getText();
if(mBodyText.getSelectionEnd() > mBodyText.getSelectionStart())
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC),
mBodyText.getSelectionStart(), mBodyText.getSelectionEnd(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
else
str.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC),
mBodyText.getSelectionEnd(),
mBodyText.getSelectionStart(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Это вырезано и вставлено из чего-то другого, так что может пострадать ваша непосредственная пассивность, но он, по крайней мере, показывает рабочий пример Spannable
(в данном случае a StyleSpan
). В API вы можете найти другие типы Spans (особенно ImageSpan
, что является распространенным вопросом среди вновь преобразованных дроидов).
Ответ 2
Я только начинаю пытаться понять это тоже, и это кажется излишне сложным.
Здесь приведен рабочий метод для добавления NEW spannable text в существующее представление. Я хотел добавить цветный текст в представление, и это казалось единственным способом сделать это.
Хотя это кажется уродливым взломом, вы можете создать фиктивный TextView (не показан нигде) и нарисовать текст там, а затем добавить этот стилизованный текст туда, где хотите. Кредит для него идет на iifuzz на anddev.org. Мой код выглядит так:
spanbuffer = new TextView(context);
spanbuffer.setText(newText, TextView.BufferType.SPANNABLE);
Spannable s = (Spannable) spanbuffer.getText();
s.setSpan(new ForegroundColorSpan(Color.RED), 0, newText.length() - 1, 0);
this.append(s);
Я думаю, вы должны создать новый spannable текст, используя SpannableFactory, например:
Spannable s = Spannable.Factory.getInstance().newSpannable(newText);
но я не мог заставить этот текст показывать новые эффекты диапазона, поэтому я сдался.