Есть ли какой-нибудь пример о Spanned и Spannable тексте?
Я борюсь с использованием EditText и Spannable текстового объекта. В наши дни я прочитал документы API около десяти раз, даже я не уверен, что я правильно понимаю. Поэтому я ищу своего рода пример, который показывает мне, как использовать EditText и Spannable.
2 ответа
Поскольку вы не указываете, что вы не можете понять из API, трудно ответить на ваши вопросы (короткий ответ: переписать свой вопрос на конкретный вопрос, а не на общий).
Типичный пример Spannable- это что-то вроде этого, чтобы превратить выделенный текст в EditText в курсив:
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
(в этом случае StyleSpan
). В API вы можете найти другие типы Span (особенно ImageSpan
, что является распространенным вопросом среди новообращенных дроидов).
Я только начинаю пытаться понять это, и это кажется излишне хитрым.
Вот рабочий метод для добавления НОВОГО связующего текста в существующее представление. Я хотел добавить цветной текст к представлению, и это казалось единственным способом сделать это.
Хотя это выглядит как уродливый хак, вы можете создать фиктивный 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);
но я не мог заставить этот текст фактически показывать новые эффекты диапазона, поэтому я сдался.