Intereting Posts
Когда андроид показывает диалог сопряжения при использовании небезопасных разъемов blcetooth RFCOMM? Как обнаружить пользователя руки, удерживающего его устройство Почему мой системный оверлей ловит все штрихи (без взаимодействия с основным видом) Почему я не должен устанавливать layout_width и layout_height в стиле? Android – удаление элемента из списка ListView при длительном нажатии Коснитесь в любом месте, чтобы открыть меню открытия навигационного ящика Невозможно отобразить 2 экземпляра моего пользовательского SurfaceView Карты Android: achartengine или AndroidPlot? Ориентация экрана для Android Экспорт подписанного пакета приложений с командной строкой Android Databinding с меню Android Custom View Constructor Android ListView addHeaderView () nullPointerException для предопределенных представлений, определенных в XML Могу ли я сделать синхронный запрос с волейболом? ViewPager не всегда обновляется при вызове setAdapter, FragmentStatePagerAdapter

В чем разница между SPAN_POINT_MARK и SPAN_MARK_POINT?

Я читал в документах для класса Spanned / Spannable для проекта, над которым я работаю. Я был озадачен определением и использованием пролетов, содержащих MARK и POINT .

Кажется, что MARK определен в Doc как «прикрепленный» к местоположению персонажа, в то время как POINT определяется как «приклеенный» к символу. Таким образом, MARK не будет перемещаться, когда текст будет изменен, и POINT будет перемещаться с символом, который он «приклеил», когда текст будет изменен.

Эти определения, похоже, показывают, что MARK является синонимом INCLUSIVE и что POINT является синонимом EXCLUSIVE .

Однако это не так, поскольку ни SPAN_MARK_MARK ни SPAN_POINT_POINT являются синонимами ни SPAN_INCLUSIVE_INCLUSIVE ни SPAN_EXCLUSIVE_EXCLUSIVE . Фактически SPAN_INCLUSIVE_INCLUSIVE совпадает с SPAN_MARK_POINT а SPAN_POINT_MARK совпадает с SPAN_EXCLUSIVE_EXCLUSIVE .

Мои вопросы следующие

  1. Почему SPAN_POINT_MARK синоним SPAN_EXCLUSIVE_EXCLUSIVE ? И почему SPAN_MARK_POINT синоним SPAN_INCLUSIVE_INCLUSIVE ?

  2. Почему SPAN_MARK_MARK и SPAN_POINT_POINT ассоциируются с SPAN_INCLUSIVE_INCLUSIVE и SPAN_EXCLUSIVE_EXCLUSIVE соответственно?

  3. Каковы истинные определения MARK и POINT в этом использовании?

Solutions Collecting From Web of "В чем разница между SPAN_POINT_MARK и SPAN_MARK_POINT?"

Мне нравится объяснять MARK vs POINT, представляя их как квадратные скобки при любом смещении, которое они существуют в диапазоне текста. Направление, на которое указывает скобка, показывает символ, к которому привязан знак или точка.

Итак, для POINT вы должны использовать открытую скобку – она ​​привязана к следующему символу. И для MARK вы должны использовать закрытую скобку – она ​​привязана к предшественнику.

Давайте рассмотрим несколько примеров каждого типа:

SPAN_MARK_MARK

Вставка со смещением диапазона длины 0: метки остаются фиксированными.

 До: Lorem]] ipsum dolor сидеть.
 После: Lorem]] INSERT ipsum dolor сидят.

Вставка в начале диапазона без длины: вставленный текст включен в диапазон диапазона.

 До: Lorem] ipsum] dolor сидеть.
 После: Lorem] INSERT ipsum] dolor сидеть.

Вставка в конце диапазона без длины: вставленный текст исключается из диапазона диапазона.

 До: Lorem] ipsum] dolor сидеть.
 После: Lorem] ipsum] INSERT dolor сидеть.

Вы можете видеть из двух последних примеров, почему флаг SPAN_MARK_MARK является синонимом флага SPAN_INCLUSIVE_EXCLUSIVE . Текст, вставленный в начале диапазона, включается в диапазон, в то время как текст, вставленный в конец, исключается.

SPAN_POINT_POINT

Вставка со смещением диапазона длины 0: точки выдвинуты вперед.

 До: Lorem [[ipsum dolor сидеть.
 После: Lorem INSERT [[ipsum dolor sit.

Вставка в начале диапазона без длины: вставленный текст исключается из диапазона диапазона.

 До: Lorem [ipsum [dolor sit.
 После: Lorem INSERT [ipsum [dolor sit.

Вставка в конце диапазона без длины: вставленный текст включен в диапазон пролета.

 До: Lorem [ipsum [dolor sit.
 После: Lorem [ipsum INSERT [dolor sit.

Снова вы можете увидеть из двух последних примеров, почему флаг SPAN_POINT_POINT является синонимом флага SPAN_EXCLUSIVE_INCLUSIVE . Текст, вставленный в начале диапазона, исключается из диапазона, а текст, вставленный в конец, включен.

SPAN_MARK_POINT

Вставка в начале диапазона: вставленный текст включен в диапазон.

 До: Lorem] ipsum [dolor sit.
 После: Lorem] INSERT ipsum [dolor sit.

Вставка в конце диапазона: вставленный текст по-прежнему включен в диапазон.

 До: Lorem] ipsum [dolor sit.
 После: Lorem] ipsum INSERT [dolor sit.

И таким образом он имеет синоним SPAN_INCLUSIVE_INCLUSIVE – вставленный текст всегда включается в диапазон диапазона.

SPAN_POINT_MARK

Вставка в начале диапазона: вставленный текст исключается из диапазона.

 Раньше: Lorem [ipsum] dolor сидеть.
 После: Lorem INSERT [ipsum] dolor сидит.

Вставка в конце диапазона: вставленный текст по-прежнему исключается из диапазона.

 Раньше: Lorem [ipsum] dolor сидеть.
 После: Lorem [ipsum] INSERT dolor сидит.

И таким образом он имеет синоним SPAN_EXCLUSIVE_EXCLUSIVE – вставленный текст всегда исключается из диапазона диапазона.

Я думаю, что документация смущает вещи, разделяя определения некоторых синонимов. Например, при описании SPAN_MARK_MARK они определяют только его использование в терминах диапазона длины 0. Затем при определении SPAN_INCLUSIVE_EXCLUSIVE (который является синонимом) они определяют только его использование в терминах не-длины длины. Я думаю, было бы намного яснее, если бы они заявили, что они являются синонимами, и имели одно определение, разделяемое обоими терминами.

Они представляют собой концептуальные концепции и думают о них в том порядке, в котором они появляются

Из документов:

MARK и POINT концептуально расположены между двумя соседними символами. Раньше MARK привязывался к персонажу, а POINT – к символу. Курсор ввода концептуально расположен между MARK и POINT. В результате, вставка нового символа между MARK и POINT оставит MARK без изменений, в то время как POINT будет сдвинут, теперь расположен после вставленного символа и все еще приклеен к тому же символу после него. В зависимости от того, произойдет ли вставка в начале или в конце диапазона, диапазон будет расширяться, чтобы включить новый символ (когда диапазон использует MARK в начале или POINT на его конце), или он будет исключен , Обратите внимание, что до и после здесь ссылаются на смещения в String, которые не зависят от визуального представления текста

Ваш вопрос

Эти определения, похоже, показывают, что MARK является синонимом INCLUSIVE и что POINT является синонимом EXCLUSIVE.

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

Давайте посмотрим на пример: мы скажем, что у нас есть следующий текст в стиле

Это пример текста

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

Это невероятно хороший пример текста

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

Это не пример текста

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

Это довольно пример текста, это не так.

Теперь все это только моя интерпретация документов. Почему SPAN_POINT_MARK является синонимом SPAN_EXCLUSIVE_EXCLUSIVE – это то, что кто-то из Google должен будет комментировать, я полагаю, но, на мой взгляд, движение MARK_POINT представляет собой включение, а POINT_MARK представляет собой исключение. SPAN_POINT_POINT и SPAN_MARK_MARK представляют 0 строк длины и, следовательно, не могут быть отнесены к включению / исключению.

: EDIT: SPAN_MARK_MARK и SPAN_POINT_POINT – это 0 строк длины, то есть строка начинается с отметки в позиции 0, а затем любые последующие добавления добавляются к строке, но позиция метки не изменяется, или строка начинается с позиции точки и любых последующих дополнений к Строка перемещает точку в конец. Эти флаги, по существу, сигнализируют отправную точку осколочной строкой и, следовательно, представляют 0 строк длины. Тогда включительные, эксклюзивные флаги могут использоваться в зависимости от того, была ли строка указана mark_mark или point_point для начала. Также SPAN_EXCLUSIVE_INCLUSIVE, когда 0-length, ведут себя как метки и SPAN_INCLUSIVE_EXCLUSIVE, когда 0-length ведут себя как точки, которые очевидны из-за того, как они определены. Как я понимаю, это моя интерпретация документов