Есть ли какой-нибудь пример о 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);

но я не мог заставить этот текст фактически показывать новые эффекты диапазона, поэтому я сдался.

Другие вопросы по тегам