Intereting Posts
Требуется ли в Интернете интернет? В чем разница между match_parent и fill_parent? Местоположение Android SDK не настроено в настройках в 64-битных Windows Свойство шрифта не найдено helvetica.ttf на леденец Байт для изображения Android KeyEvent.ACTION_UP активирован TWICE для ACTION_MEDIA_BUTTON Создание различной компоновки для телефона и планшета Android. Пользовательская позиция подсказки в поле «Редактировать текст». Разрешение отказа: startActivity запрашивает запуск как пользователь -2, но вызывает от пользователя 0; Это требует android.permission.INTERACT_ACROSS_USERS_FULL Почему мы используем 10.0.2.2 для подключения к локальному веб-серверу вместо использования IP-адреса компьютера в Android-клиенте Лучший способ сравнить даты в Android Как отформатировать номер телефона с помощью PhoneNumberUtils? L-релиз анимации Touch Ripple на пре-L Можно ли получить контекст приложения в проекте Android Library? Получить день недели из GregorianCalendar

Объясните значение флажков 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 и т. Д.