Android EditText: как применять промежутки при составлении?

Как я могу применить интервалы к тексту EditText, когда пользователь составляет?

Например, пользователь активировал выделение жирным шрифтом при написании текста, поэтому с тех пор каждый введенный символ должен быть жирным.

Я думал о добавлении прослушивателя изменения текста в EditText и обновлении текста по мере того, как пользователь составляет, но я хочу знать, есть ли лучший способ сделать это.


person user3705007    schedule 07.10.2014    source источник
comment
вам ничего не нужно: например, установите полужирный диапазон длиной 3, затем поместите в него каретку и начните печатать...   -  person pskink    schedule 07.10.2014
comment
@pskink - А что, если текста вообще нет?   -  person user3705007    schedule 07.10.2014
comment
подсказка: попробуйте разные флаги setSpan   -  person pskink    schedule 07.10.2014
comment
@pskink Я пробовал разные флаги, но, к сожалению, безуспешно.   -  person user3705007    schedule 07.10.2014
comment
какие флаги пробовал?   -  person pskink    schedule 07.10.2014
comment
@pskink Хорошо, я понял (я думаю), сначала не имело значения, какой флаг я использовал, потому что стиль был неправильным. Я использовал только android.graphics.Typeface.BOLD вместо StyleSpan(android.graphics.Typeface.BOLD). После исправления я снова начал играть с флагами и в конце концов нашел работающий — Spannable.SPAN_INCLUSIVE_INCLUSIVE.   -  person user3705007    schedule 07.10.2014


Ответы (2)


На этот вопрос уже был дан ответ в комментариях, но чтобы сделать его более постоянным, я добавлю более полный ответ.

Чтобы установить диапазон (например, полужирный) везде, где пользователь пишет, вы просто устанавливаете диапазон для текста в позиции курсора (или выделения).

StyleSpan boldSpan = new StyleSpan(Typeface.BOLD);
int start = editText.getSelectionStart();
int end = editText.getSelectionEnd();
int flag = Spannable.SPAN_INCLUSIVE_INCLUSIVE;
editText.getText().setSpan(boldSpan, start, end, flag);

Флаг SPAN_INCLUSIVE_INCLUSIVE означает, что любой текст, добавленный до или после диапазона, будет включен в диапазон, даже если длина текста равна 0 при добавлении диапазона.

См. также

person Suragch    schedule 19.07.2017
comment
Спасибо за отличное предложение. Флаг 'SPAN_INCLUSIVE_INCLUSIVE', устанавливающий шрифт BOLD, работает хорошо. Но когда я переключаюсь, чтобы установить шрифт НЕ ЖИРНЫМ (просто вернусь к нормальному), вставленный текст по-прежнему остается ЖИРНЫМ. Итак, как решить эту проблему. Спасибо! - person Gallery; 15.03.2018
comment
Взгляните на clearSpans() и removeSpan(). @Галерея - person Suragch; 15.03.2018

Вы можете использовать наблюдатель за текстом и установить диапазон в редактируемом элементе, который вы получаете в методе afterTextChanged(), в настоящее время я пишу редактор форматированного текста, и это подход, который я использовал со стилями, и он работает довольно хорошо, однако , до сих пор мне не удалось установить диапазоны, для которых требуются абзацы, такие как quoteSpan или bulletSpan.

Но если вам просто нужны простые стили, такие как курсив, полужирный шрифт и т. д., вы можете использовать этот подход.

person amit kumar    schedule 22.08.2019