2013-10-05 5 views
8

Я установил SpannableString в EditText, теперь я хочу получить этот текст из EditText и получить его информацию разметки. Я попытался как этотПолучить Spannable String из EditText

SpannableStringBuilder spanStr = (SpannableStringBuilder) et.getText().; 
int boldIndex = spanStr.getSpanStart(new StyleSpan(Typeface.BOLD)); 
int italicIndex  = spanStr.getSpanStart(new StyleSpan(Typeface.ITALIC)); 

, но он дает индекс -1 для обоих жирным шрифтом и курсивом, хотя он показывает текст курсивом и жирным шрифтом.

Пожалуйста, помогите.

ответ

10

Из кода, который вы опубликовали, вы передаете новые пролеты в spanStr и попросите его найти их. Вам понадобится ссылка на экземпляры тех областей, которые фактически применяются. Если это невозможно или вы не хотите отслеживать промежутки напрямую, вы можете просто позвонить getSpans, чтобы получить все пролеты. Затем вы можете отфильтровать этот массив для того, что хотите.

Если вы не заботитесь о пролетах в частности, вы также можете просто позвонить Html.toHtml(spanStr), чтобы получить версию с меткой HTML.

редактировать: добавить код примера

Это будет захватывать все примененные StyleSpans, который является то, что вы хотите.

/* From the Android docs on StyleSpan: "Describes a style in a span. 
    * Note that styles are cumulative -- both bold and italic are set in 
    * separate spans, or if the base is bold and a span calls for italic, 
    * you get bold italic. You can't turn off a style from the base style."*/ 
StyleSpan[] mSpans = et.getText().getSpans(0, et.length(), StyleSpan.class); 

Вот ссылка на документы StyleSpan.

Чтобы выбрать промежутки, которые вы хотите, если у вас есть различные промежутки, смешанные с коллекцией/массивом, вы можете использовать instanceof, чтобы выяснить, какие у вас есть расстояния. Этот фрагмент будет проверять, является ли конкретный интервал mSpan экземпляром StyleSpan, а затем распечатывает его индексы и флаги начала и конца. Флаги являются константами, описывающими поведение контуров диапазона, например: включают ли они и применяют стилирование к тексту в индексах начала и конца или только для ввода текста с индексом внутри диапазона начала/конца).

if (mSpan instanceof StyleSpan) { 
     int start = et.getSpanStart(mSpan); 
     int end = et.getSpanEnd(mSpan); 
     int flag = et.getSpanFlags(mSpan); 
     Log.i("SpannableString Spans", "Found StyleSpan at:\n" + 
       "Start: " + start + 
       "\n End: " + end + 
       "\n Flag(s): " + flag); 
} 
+0

Я могу получить HTML-версию с тегами, но не могу получить доступ к getSpans. Можете ли вы предоставить код, например, полужирный индекс. Я установил полужирный диапазон так же, как я пытался его получить. –

+0

как вы используете getSpans? – pskink

+0

@pskink Объект [] objArray = spanStr.getSpans (0, spanStr.length() - 1, Object.class); он дает мне массив классов, но как найти индекс для этого класса? –

Смежные вопросы