Intereting Posts
Включить службы определения местоположения для Android, если пользователь не выбрал параметр «Никогда» Создает ли startService () новый экземпляр службы или использует существующий? Spinner не отображает выбранное значение Разработка Android: невозможно создать значок @ drawable / ic_action_search Как загрузить одинаковое предпочтение экрана в деталях PreferenceFragment Невозможно передать действие провайдера действия поставщику действий Буферизация аудиопотоков Можно ли получить 2 значения в onNext () абонента в rxjava android? Android: CountDownTimer пропускает последний onTick ()! Как остановить процесс из System.Diagnostics.Process и получить статистику в конце Sqlite: похоже, что moveToNext работает без moveToFirst «MapFragment не может быть разрешен для типа», хотя я на уровне API 17 Проблема с Eclipse для Android Не удалось создать класс BuildConfig Проверка пустого поля RadioGroup с помощью setError в Android Вызвано: java.lang.OutOfMemoryError: размер растрового изображения превышает бюджет VM

Объясните значение флажков Span, таких как SPAN_EXCLUSIVE_EXCLUSIVE

Может ли кто-нибудь четко объяснить с примерами, что означает каждый флаг диапазона, такой как SPAN_EXCLUSIVE_EXCLUSIVE и SPAN_MARK_MARK и когда использовать какие флаги?

Я не понимаю официальную документацию, когда она говорит:

SPAN_EXCLUSIVE_EXCLUSIVE типа SPAN_EXCLUSIVE_EXCLUSIVE не расширяются, чтобы включать текст, вставленный в их начальную или конечную точку.

Включает ли «расширение», чтобы включить изменения, сделанные после вставки пролетов?

Означает ли это, что эти флаги не влияют на Spannables с неизменяемым текстом?

Solutions Collecting From Web of "Объясните значение флажков Span, таких как SPAN_EXCLUSIVE_EXCLUSIVE"

Включает ли «расширение», чтобы включить изменения, сделанные после вставки пролетов?

Да. Например, предположим, что мы имеем следующее:

Быстрая лиса подпрыгнула.

Если мы использовали SPAN_EXCLUSIVE_EXCLUSIVE на полужирном SPAN_EXCLUSIVE_EXCLUSIVE , и мы вставляем текст в середину диапазона, он все же полужирный:

Быстрая коричневая лиса подпрыгнула.

Однако, если мы вставляем текст в начале или в конце жирного шрифта, вставленный текст не является жирным шрифтом:

Действительно быстрый лис прыгнул.

Если, однако, мы использовали SPAN_INCLUSIVE_EXCLUSIVE , то вставка текста в начале будет включена как часть диапазона, и мы будем иметь:

Действительно быстрый лис прыгнул.

Означает ли это, что эти флаги не влияют на Spannables с неизменяемым текстом?

Я бы сказал, что они имеют ограниченное использование для неизменяемого текста. В основном, они будут использоваться с SpannableStringBuilder или вещами, которые используют один под обложками (например, EditText ).

Какие флаги не означают

Когда я впервые увидел INCLUSIVE и EXCLUSIVE части флагов Spannable , я подумал, что они просто сказали, включает ли диапазон в начало и конец индексных позиций диапазона. Это неправда. Позвольте мне проиллюстрировать это следующим примером.

 String myString = "01234"; int start = 1; int end = 3; int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing SpannableString spannableString = new SpannableString(myString); ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED); spannableString.setSpan(foregroundSpan, start, end, spanFlag); textView.setText(spannableString); 

Вот результаты:

SPAN_INCLUSIVE_INCLUSIVE

Введите описание изображения здесь

SPAN_INCLUSIVE_EXCLUSIVE

Введите описание изображения здесь

SPAN_EXCLUSIVE_INCLUSIVE

Введите описание изображения здесь

SPAN_EXCLUSIVE_EXCLUSIVE

Введите описание изображения здесь

Они все одинаковы! Флаги не влияют на диапазон. Пауза всегда включает символ в начальный индекс и исключает символ в конце индекса.

Что означают флаги

INCLUSIVE И EXCLUSIVE части флажков Spannable на самом деле определяют, должен ли диапазон включать текст, который вставлен в начальную или конечную позиции .

Вот пример, иллюстрирующий это.

 String myString = "01234"; int start = 1; int end = 3; int spanFlag = Spannable.SPAN_INCLUSIVE_INCLUSIVE; // this is what is changing // set the span SpannableStringBuilder spannableString = new SpannableStringBuilder(myString); ForegroundColorSpan foregroundSpan = new ForegroundColorSpan(Color.RED); spannableString.setSpan(foregroundSpan, start, end, spanFlag); // insert the text after the span has already been set // (inserting at start index second so that end index doesn't get messed up) spannableString.insert(end, "x"); spannableString.insert(start, "x"); textView.setText(spannableString); 

Вот результаты после вставки x в конец и начала индексов:

SPAN_INCLUSIVE_INCLUSIVE

Введите описание изображения здесь

SPAN_INCLUSIVE_EXCLUSIVE

Введите описание изображения здесь

SPAN_EXCLUSIVE_INCLUSIVE

Введите описание изображения здесь

SPAN_EXCLUSIVE_EXCLUSIVE

Введите описание изображения здесь

Заметки

  • Большая часть этого ответа описывает то, что ОП знал. Я просто добавляю его для будущих посетителей, таких как я, которые этого не знали.
  • Во втором примере мне пришлось использовать SpannableStringBuilder потому что текст в SpannableString является неизменным, поэтому вы не можете вставлять в него текст. Таким образом, флаги, как правило, не имеют смысла для SpannableString . Однако можно представить себе ситуацию, когда промежутки из SpannableString будут скопированы в SpannableStringBuilder или Editable , и оттуда флаги будут иметь смысл.
  • См. Этот ответ для разницы между SpannableString , SpannableStringBuilder , Editable и т. Д.