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 | Нет | Идентификатор узла элемента. |