Text¶
Text
- компонент React для отображения текста.
Text
поддерживает вложенность, стилизацию и обработку касаний.
В следующем примере вложенные заголовок и основной текст наследуют fontFamily
от styles.baseText
, но заголовок предоставляет свои собственные дополнительные стили. Заголовок и тело будут накладываться друг на друга из-за буквальных новых строк:
Вложенный текст¶
И Android, и iOS позволяют отображать форматированный текст путем аннотирования диапазонов строки с определенным форматированием, например, жирным или цветным текстом (NSAttributedString
на iOS, SpannableString
на Android). На практике это очень утомительно. В React Native мы решили использовать для этого веб-парадигму, где вы можете вложить текст для достижения того же эффекта.
За кулисами React Native преобразует это в плоскую NSAttributedString
или SpannableString
, которая содержит следующую информацию:
1 2 3 |
|
Контейнеры¶
Элемент <Text>
уникален с точки зрения компоновки: все, что находится внутри него, больше не использует компоновку Flexbox, а использует компоновку текста. Это означает, что элементы внутри <Text>
больше не являются прямоугольниками, а заворачиваются, когда видят конец строки.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
|
Ограниченное наследование стиля¶
В Интернете обычный способ установить семейство и размер шрифта для всего документа — это воспользоваться унаследованными свойствами CSS, например, такими:
1 2 3 4 5 6 |
|
Все элементы в документе наследуют этот шрифт, если только они или один из их родителей не укажет новое правило.
В React Native мы более строги к этому: Вы должны обернуть все текстовые узлы внутри компонента <Text>
. Вы не можете располагать текстовый узел непосредственно под <View>
.
1 2 3 4 5 6 7 8 9 10 11 |
|
Вы также теряете возможность установить шрифт по умолчанию для всего поддерева. Между тем, fontFamily
принимает только одно имя шрифта, что отличается от font-family
в CSS. Рекомендуемый способ использования согласованных шрифтов и размеров в приложении — создать компонент MyAppText
, который включает их, и использовать этот компонент в приложении. Вы также можете использовать этот компонент для создания более специфических компонентов, таких как MyAppHeaderText
, для других видов текста.
1 2 3 4 5 6 7 8 9 |
|
Если предположить, что MyAppText
— это компонент, который только рендерит свои дочерние элементы в компонент Text
со стилизацией, то MyAppHeaderText
можно определить следующим образом:
1 2 3 4 5 6 7 8 9 10 11 |
|
Составление MyAppText
таким образом гарантирует, что мы получим стили от компонента верхнего уровня, но оставляет нам возможность добавлять / переопределять их в конкретных случаях использования.
В React Native все еще существует концепция наследования стилей, но она ограничена текстовыми поддеревьями. В данном случае вторая часть будет и жирной, и красной.
1 2 3 4 |
|
Мы считаем, что такой более ограниченный способ стилизации текста позволит создавать более качественные приложения:
-
(Разработчик) Компоненты React разработаны с учетом сильной изоляции: Вы должны иметь возможность поместить компонент в любое место вашего приложения, будучи уверенным, что до тех пор, пока пропсы одинаковы, он будет выглядеть и вести себя одинаково. Свойства текста, которые могут быть унаследованы от других пропсов, нарушат эту изоляцию.
-
(Реализатор) Реализация React Native также упрощена. Нам не нужно иметь поле
fontFamily
на каждом отдельном элементе, и нам не нужно потенциально обходить дерево до корня каждый раз, когда мы отображаем текстовый узел. Наследование стиля кодируется только в родном компоненте Text и не просачивается в другие компоненты или саму систему.
Свойства¶
accessibilityHint
¶
Подсказка доступности помогает пользователям понять, что произойдет, когда они выполнят действие над элементом доступности, если результат не ясен из метки доступности.
Тип |
---|
string |
accessibilityLanguage
¶
Значение, указывающее, какой язык должен использоваться программой чтения с экрана при взаимодействии пользователя с элементом. Оно должно соответствовать спецификации BCP 47.
Дополнительную информацию см. в iOS accessibilityLanguage
doc.
Тип |
---|
string |
accessibilityLabel
¶
Переопределяет текст, который считывается программой чтения с экрана, когда пользователь взаимодействует с элементом. По умолчанию метка строится путем обхода всех дочерних элементов и накопления всех узлов Text
, разделенных пробелом.
Тип |
---|
string |
accessibilityRole
¶
Указывает программе чтения экрана рассматривать текущий элемент, на котором сосредоточено внимание, как имеющий определенную роль.
В iOS эти роли отображаются на соответствующие черты доступности. Кнопка изображения имеет ту же функциональность, что и в случае, когда для трейта установлены значения 'image' и 'button'. Дополнительную информацию см. в Руководстве по доступности.
Тип |
---|
AccessibilityRole |
accessibilityState
¶
Указывает программе чтения экрана рассматривать элемент, на котором сфокусировано внимание, как находящийся в определенном состоянии.
Вы можете указать одно состояние, отсутствие состояния или несколько состояний. Состояния должны быть переданы через объект. Например: {selected: true, disabled: true}
.
Тип |
---|
AccessibilityState |
accessibilityActions
¶
Действия доступности позволяют ассистивной технологии программно вызывать действия компонента. Свойство accessibilityActions
должно содержать список объектов действий. Каждый объект действия должен содержать имя поля и метку.
Дополнительную информацию см. в Руководстве по доступности.
Тип | Обязательно |
---|---|
array | Нет |
onAccessibilityAction
¶
Вызывается, когда пользователь выполняет действия по обеспечению доступности. Единственным аргументом этой функции является событие, содержащее имя выполняемого действия.
Дополнительную информацию см. в Руководстве по доступности.
Тип | Обязательно |
---|---|
function | Нет |
accessible
¶
Если установлено значение true
, указывает, что представление является элементом доступности.
Дополнительную информацию см. в Руководстве по доступности.
Тип | По-умолчанию |
---|---|
boolean | true |
adjustsFontSizeToFit
¶
Указывает, следует ли автоматически уменьшать масштаб шрифтов для соответствия заданным стилевым ограничениям.
Тип | По-умолчанию |
---|---|
boolean | false |
allowFontScaling
¶
Указывает, должны ли шрифты масштабироваться с учетом настроек доступности Text Size.
Тип | По-умолчанию |
---|---|
boolean | true |
android_hyphenationFrequency
¶
Устанавливает частоту использования автоматического дефиса при определении разрыва слов на Android API Level 23+.
Тип | По-умолчанию |
---|---|
enum('none', 'normal', 'full') | 'none' |
aria-busy
¶
Указывает на то, что элемент изменяется и что вспомогательные технологии могут захотеть подождать, пока изменения не будут завершены, прежде чем информировать пользователя об обновлении.
Тип | По-умолчанию |
---|---|
boolean | false |
aria-checked
¶
Указывает состояние элемента с флажком. Это поле может принимать либо булево значение, либо строку "mixed"
для представления смешанных флажков.
Тип | По-умолчанию |
---|---|
boolean, 'mixed' | false |
aria-disabled
¶
Указывает, что элемент воспринимается, но отключен, поэтому его нельзя редактировать или использовать иным образом.
Тип | По-умолчанию |
---|---|
boolean | false |
aria-expanded
¶
Указывает, является ли расширяемый элемент в данный момент развернутым или свернутым.
Тип | По-умолчанию |
---|---|
boolean | false |
aria-label
¶
Определяет строковое значение, которое маркирует интерактивный элемент.
Тип |
---|
string |
aria-selected
¶
Указывает, выбран ли выбираемый элемент в данный момент или нет.
Тип |
---|
boolean |
dataDetectorType
¶
Определяет типы данных, преобразуемых в кликабельные URL-адреса в текстовом элементе. По умолчанию типы данных не определяются.
Вы можете указать только один тип.
Тип | По-умолчанию |
---|---|
enum('phoneNumber', 'link', 'email', 'none', 'all') | 'none' |
disabled
¶
Указывает отключенное состояние текстового представления для целей тестирования.
Тип | По-умолчанию |
---|---|
bool | false |
dynamicTypeRamp
¶
Рампа Dynamic Type, применяемая к этому элементу на iOS.
Тип | По-умолчанию |
---|---|
enum('caption2', 'caption1', 'footnote', 'subheadline', 'callout', 'body', 'headline', 'title3', 'title2', 'title1', 'largeTitle') | 'body' |
ellipsizeMode
¶
Когда задано numberOfLines
, этот пропс определяет, как будет усечен текст. numberOfLines
должен быть установлен в сочетании с этим пропсом.
Это может быть одно из следующих значений:
head
— Строка отображается так, чтобы конец помещался в контейнер, а отсутствующий текст в начале строки обозначается глифом многоточия. например, "...wxyz".middle
— строка отображается так, что начало и конец помещаются в контейнер, а отсутствующий текст в середине обозначается глифом многоточия. "ab...yz"tail
— Строка отображается так, что начало помещается в контейнер, а пропущенный текст в конце строки обозначается многоточием. например, "abcd...".clip
— Линии не выводятся за край текстового контейнера.
На Android, когда numberOfLines
установлено в значение больше, чем 1
, корректно работает только значение tail
.
Тип | По-умолчанию |
---|---|
enum('head', 'middle', 'tail', 'clip') | tail |
id
¶
Используется для определения местоположения этого представления из нативного кода. Имеет приоритет над пропсом nativeID
.
Тип |
---|
string |
maxFontSizeMultiplier
¶
Определяет наибольший возможный масштаб, которого может достичь шрифт, если включено allowFontScaling
. Возможные значения:
null/undefined
: наследование от родительского узла или глобального значения по умолчанию (0
)0
: нет максимального значения, игнорировать родительское/глобальное значение по умолчанию>= 1
: устанавливаетmaxFontSizeMultiplier
этого узла в данное значение
Тип | По-умолчанию |
---|---|
number | undefined |
minimumFontScale
¶
Определяет наименьший возможный масштаб, которого может достичь шрифт, когда включена функция adjustsFontSizeToFit
. (значения 0.01
- 1.0
).
Тип |
---|
number |
nativeID
¶
Используется для определения местоположения этого представления из нативного кода.
Тип |
---|
string |
numberOfLines
¶
Используется для усечения текста многоточием после вычисления расположения текста, включая обводку строк, таким образом, чтобы общее количество строк не превышало данного числа. Установка этого свойства в 0
приведет к снятию этого значения, что означает, что ограничение на количество строк применяться не будет.
Этот параметр обычно используется с ellipsizeMode
.
Тип | По-умолчанию |
---|---|
number | 0 |
onLayout
¶
Вызывается при монтировании и при смене раскладки.
Тип |
---|
({nativeEvent: LayoutEvent}) => void |
onLongPress
¶
Эта функция вызывается при длительном нажатии.
Тип |
---|
({nativeEvent: PressEvent}) => void |
onMoveShouldSetResponder
¶
Хочет ли это представление "претендовать" на отзывчивость на прикосновение? Это вызывается для каждого движения прикосновения к View
, когда он не является ответчиком.
Тип |
---|
({nativeEvent: PressEvent}) => boolean |
onPress
¶
Функция, вызываемая при нажатии кнопки пользователем, срабатывает после onPressOut
.
Тип |
---|
({nativeEvent: PressEvent}) => void |
onPressIn
¶
Вызывается сразу же при задействовании касания, перед onPressOut
и onPress
.
Тип |
---|
({nativeEvent: PressEvent}) => void |
onPressOut
¶
Вызывается, когда прикосновение отпускается.
Тип |
---|
({nativeEvent: PressEvent}) => void |
onResponderGrant
¶
Представление теперь реагирует на события прикосновения. Сейчас самое время выделить и показать пользователю, что происходит.
Тип |
---|
({nativeEvent: PressEvent}) => void |
onResponderMove
¶
Пользователь перемещает свой палец.
Тип |
---|
({nativeEvent: PressEvent}) => void |
onResponderRelease
¶
Уволен в конце касания.
Тип |
---|
({nativeEvent: PressEvent}) => void |
Ответчик был забран из View
. Может быть взят другими представлениями после вызова onResponderTerminationRequest
, или может быть взят ОС без запроса (например, происходит с центром управления/центром уведомлений на iOS).
Тип |
---|
({nativeEvent: PressEvent}) => void |
onResponderTerminationRequest
¶
Какой-то другой View
хочет стать отвечающим и просит этот View
освободить его отвечающего. Возврат true
позволяет освободить его.
Тип |
---|
({nativeEvent: PressEvent}) => boolean |
onStartShouldSetResponderCapture
¶
Если родительский View
хочет предотвратить превращение дочернего View
в ответчика при запуске касания, он должен иметь этот обработчик, который возвращает true
.
Тип |
---|
({nativeEvent: PressEvent}) => boolean |
onTextLayout
¶
Вызывается при изменении макета текста.
Тип |
---|
(TextLayoutEvent ) => mixed |
pressRetentionOffset
¶
Когда вид прокрутки отключен, этот параметр определяет, насколько далеко ваше прикосновение может отойти от кнопки, прежде чем кнопка будет деактивирована. После деактивации попробуйте переместить ее обратно, и вы увидите, что кнопка снова активирована! Переместите ее вперед-назад несколько раз, пока вид прокрутки отключен. Убедитесь, что вы передаете константу, чтобы уменьшить выделение памяти.
Тип |
---|
Rect, number |
role
¶
role
передает назначение компонента пользователю вспомогательной технологии. Имеет приоритет над пропсом accessibilityRole
.
Тип |
---|
Role |
selectable
¶
Позволяет пользователю выбрать текст, чтобы использовать встроенную функцию копирования и вставки.
Тип | По-умолчанию |
---|---|
boolean | false |
selectionColor
¶
Цвет выделения текста.
Тип |
---|
color |
style
¶
Тип |
---|
Text Style, View Style Props |
suppressHighlighting
¶
Если true
, то при нажатии на текст не происходит никаких визуальных изменений. По умолчанию при нажатии на текст выделяется серый овал.
Тип | По-умолчанию |
---|---|
boolean | false |
testID
¶
Используется для размещения этого представления в сквозных тестах.
Тип |
---|
string |
textBreakStrategy
¶
Установка стратегии разбиения текста на Android API Level 23+, возможные значения simple
, highQuality
, balanced
.
Тип | По-умолчанию |
---|---|
enum('simple', 'highQuality', 'balanced') | highQuality |
userSelect
¶
Позволяет пользователю выделять текст и использовать встроенные функции копирования и вставки. Имеет приоритет перед пропсом selectable
.
Тип | По-умолчанию |
---|---|
enum('auto', 'text', 'none', 'contain', 'all') | none |
lineBreakStrategyIOS
¶
Установка стратегии перевода строки на iOS 14+. Возможные значения: none
, standard
, hangul-word
и push-out
.
Тип | По-умолчанию |
---|---|
enum('none', 'standard', 'hangul-word', 'push-out') | 'none' |
Определения типа¶
TextLayout¶
Объект TextLayout
является частью обратного вызова TextLayoutEvent
и содержит данные измерения для строки Text
.
Пример
1 2 3 4 5 6 7 8 9 10 |
|
Свойства
Имя | Тип | Обязательно | Описание |
---|---|---|---|
ascender | number | Нет | Высота подъема строки после изменения расположения текста. |
capHeight | number | Нет | Высота заглавной буквы над базовой линией. |
descender | number | Нет | Высота спуска строки после изменения расположения текста. |
height | number | Нет | Высота строки после изменения расположения текста. |
width | number | Нет | Ширина строки после изменения расположения текста. |
x | number | Нет | Координата линии X внутри компонента Text. |
xHeight | number | Нет | Расстояние между базовой линией и медианой линии (размер корпуса). |
y | number | Нет | Координата линии Y внутри компонента Text. |
TextLayoutEvent¶
Объект TextLayoutEvent
возвращается в обратном вызове в результате изменения компоновки компонента. Он содержит ключ lines
со значением, которое представляет собой массив, содержащий объект TextLayout
, соответствующий каждой отрисованной строке текста.
Пример
1 2 3 4 5 6 7 8 |
|
Свойства
Имя | Тип | Обязательно | Описание |
---|---|---|---|
lines | array of TextLayouts | Нет | Предоставляет данные TextLayout для каждой отрисованной строки. |
target | number | Нет | Идентификатор узла элемента. |