TextInput
Базовый компонент для ввода текста в приложение с помощью клавиатуры. Свойства позволяют настроить различные функции, такие как автоисправление, автозаглавие, текст подсказки и различные типы клавиатур, например, числовая клавиатура.
Наиболее простой сценарий использования — размещение TextInput и подписка на события onChangeText для чтения пользовательского ввода. Также доступны другие события, такие как onSubmitEditing и onFocus, на которые можно подписаться. Пример минимального использования:
Два метода, доступные через собственный элемент, — .focus() и .blur(), которые позволяют программно установить или снять фокус с TextInput.
Обратите внимание, что некоторые свойства доступны только с multiline={true/false}. Кроме того, стили границы, которые применяются только к одной стороне элемента (например, borderBottomColor, borderLeftWidth, и т. д.), не будут применяться, если multiline=true. Чтобы добиться такого же эффекта, можно обернуть свой TextInput в View.
TextInput по умолчанию имеет границу в нижней части своего представления. Отступ этой границы определяется фоновым изображением, предоставляемым системой, и его нельзя изменить. Решения для избежания этого заключаются в том, чтобы либо не устанавливать высоту явно, в этом случае система позаботится о правильном отображении границы, либо не отображать границу, установив underlineColorAndroid в прозрачный цвет.
Обратите внимание, что на Android при выделении текста в поле ввода параметр активности приложения windowSoftInputMode может измениться на adjustResize. Это может привести к проблемам с компонентами, у которых свойство position: 'absolute', когда активна клавиатура. Чтобы избежать этого поведения, укажите windowSoftInputMode в файле AndroidManifest.xml ( https://developer.android.com/guide/topics/manifest/activity-element.html) или управляйте этим параметром программно с помощью кода нативных языках.
Справочник
Свойства
Свойства View
Наследует Свойства View.
allowFontScaling
Указывает, следует ли масштабировать шрифты с учетом настроек доступности размера текста. По умолчанию значение true.
| Тип |
|---|
| bool |
autoCapitalize
Указывает TextInput на автоматическое приведение определенных символов к верхнему регистру. Это свойство не поддерживается некоторыми типами клавиатур, такими как name-phone-pad.
-
characters: все символы. -
words: первая буква каждого слова. -
sentences: первая буква каждого предложения (по умолчанию). -
none: не производить автоматическое приведение к верхнему регистру.
| Тип |
|---|
| enum('none', 'sentences', 'words', 'characters') |
autoComplete Android
Указывает подсказки автозаполнения для системы, чтобы она могла предложить автозаполнение. На Android система всегда пытается предложить автозаполнение, используя эвристику для определения типа содержимого. Чтобы отключить автозаполнение, установите autoComplete в off.
Возможные значения для autoComplete:
birthdate-daybirthdate-fullbirthdate-monthbirthdate-yearcc-csccc-expcc-exp-daycc-exp-monthcc-exp-yearcc-numberemailgendernamename-familyname-givenname-middlename-middle-initialname-prefixname-suffixpasswordpassword-newpostal-addresspostal-address-countrypostal-address-extendedpostal-address-extended-postal-codepostal-address-localitypostal-address-regionpostal-codestreet-addresssms-otpteltel-country-codetel-nationaltel-deviceusernameusername-newoff
| Тип |
|---|
| enum('birthdate-day', 'birthdate-full', 'birthdate-month', 'birthdate-year', 'cc-csc', 'cc-exp', 'cc-exp-day', 'cc-exp-month', 'cc-exp-year', 'cc-number', 'email', 'gender', 'name', 'name-family', 'name-given', 'name-middle', 'name-middle-initial', 'name-prefix', 'name-suffix', 'password', 'password-new', 'postal-address', 'postal-address-country', 'postal-address-extended', 'postal-address-extended-postal-code', 'postal-address-locality', 'postal-address-region', 'postal-code', 'street-address', 'sms-otp', 'tel', 'tel-country-code', 'tel-national', 'tel-device', 'username', 'username-new', 'off') |
autoCorrect
Если false, отключает автоисправление. Значение по умолчанию true.
| Тип |
|---|
| bool |
autoFocus
Если true, устанавливает фокус на поле ввода при componentDidMount или useEffect . Значение по умолчанию false.
| Тип |
|---|
| bool |
blurOnSubmit
Если true, поле ввода будет снимать фокус при отправке. Значение по умолчанию — true для однострочных полей и false для многострочных полей. Обратите внимание, что для многострочных полей, установка blurOnSubmit в true означает, что нажатие клавиши ввода будет снимать фокус с поля и вызывать событие onSubmitEditing вместо вставки новой строки в поле.
| Тип |
|---|
| bool |
caretHidden
Если true, курсор скрыт. Значение по умолчанию false.
| Тип |
|---|
| bool |
clearButtonMode iOS
Когда должна отображаться кнопка очистки в правой части поля ввода. Это свойство поддерживается только для компонента TextInput с одной строкой. Значение по умолчанию never.
| Тип |
|---|
| enum('never', 'while-editing', 'unless-editing', 'always') |
clearTextOnFocus iOS
Если true, поле ввода автоматически очищается при начале редактирования.
| Тип |
|---|
| bool |
contextMenuHidden
Если true, контекстное меню скрыто. Значение по умолчанию false.
| Тип |
|---|
| bool |
dataDetectorTypes iOS
Определяет типы данных, преобразуемых в нажатия по URL в поле ввода. Действительно только если multiline={true} и editable={false}. По умолчанию типы данных не обнаруживаются.
Можно указать один тип или массив из нескольких типов.
Возможные значения для dataDetectorTypes:
'phoneNumber''link''address''calendarEvent''none''all'
| Тип |
|---|
| enum('phoneNumber', 'link', 'address', 'calendarEvent', 'none', 'all'), ,array of enum('phoneNumber', 'link', 'address', 'calendarEvent', 'none', 'all') |
defaultValue
Предоставляет начальное значение, которое изменяется при вводе пользователем. Полезно в тех случаях, когда вы не хотите обрабатывать прослушивание событий и обновление свойства value для сохранения состояния управления в синхронизации.
| Тип |
|---|
| string |
disableFullscreenUI Android
Когда false, если доступно мало места вокруг поля ввода (например, в альбомной ориентации на телефоне), ОС может предложить пользователю редактировать текст в режиме полноэкранного поля ввода. Когда true, эта функция отключена, и пользователи всегда будут редактировать текст непосредственно в поле ввода. По умолчанию false.
| Тип |
|---|
| bool |
editable
Если false, текст не редактируется. Значение по умолчанию true.
| Тип |
|---|
| bool |
enablesReturnKeyAutomatically iOS
Если true, клавиатура отключает клавишу возврата, когда нет текста, и автоматически включает ее, когда текст есть. Значение по умолчанию false.
| Тип |
|---|
| bool |
importantForAutofill Android
Указывает операционной системе, следует ли включать отдельные поля в структуру отображения для целей автозаполнения на Android API Level 26+. Возможные значения: auto, no, noExcludeDescendants, yes, и yesExcludeDescendants. Значение по умолчанию auto.
-
auto: Позволяет системе Android использовать свои эвристики для определения, важно ли это представление для автозаполнения. -
no: Это представление не важно для автозаполнения. -
noExcludeDescendants: Это представление и его дочерние элементы не важны для автозаполнения. -
yes: Это представление важно для автозаполнения. -
yesExcludeDescendants: Это представление важно для автозаполнения, но его дочерние элементы не важны для автозаполнения.
| Тип |
|---|
| enum('auto', 'no', 'noExcludeDescendants', 'yes', 'yesExcludeDescendants') |
inlineImageLeft Android
Если определено, предоставленное изображение ресурса будет отображаться слева. Ресурс изображения должен быть внутри /android/app/src/main/res/drawable и ссылаться так
<TextInput inlineImageLeft='search_icon' />
| Тип |
|---|
| string |
inlineImagePadding Android
Отступ между встроенным изображением (если есть) и самим текстовым полем.
| Тип |
|---|
| число |
inputAccessoryViewID iOS
Необязательный идентификатор, который связывает пользовательский InputAccessoryView с этим текстовым полем. InputAccessoryView отображается над клавиатурой, когда это текстовое поле находится в фокусе.
| Тип |
|---|
| строка |
keyboardAppearance iOS
Определяет цвет клавиатуры.
| Тип |
|---|
| перечисление ('default', 'light', 'dark') |
keyboardType
Определяет, какая клавиатура должна открыться, например, numeric.
См. скриншоты всех типов здесь.
Следующие значения работают на всех платформах:
defaultnumber-paddecimal-padnumericemail-addressphone-padurl
Только для iOS
Следующие значения работают только на iOS:
ascii-capablenumbers-and-punctuationname-phone-padtwitterweb-search
Только для Android
Следующие значения работают только на Android:
visible-password
| Тип |
|---|
| перечисление ('default', 'email-address', 'numeric', 'phone-pad', 'ascii-capable', 'numbers-and-punctuation', 'url', 'number-pad', 'name-phone-pad', 'decimal-pad', 'twitter', 'web-search', 'visible-password') |
maxFontSizeMultiplier
Устанавливает максимальный возможный масштаб шрифта, когда allowFontScaling включен. Возможные значения:
-
null/undefined(по умолчанию): наследуется от родительского узла или от глобального значения по умолчанию (0) -
0: нет ограничения, игнорируется родительский/глобальный параметр по умолчанию -
>= 1: устанавливаетmaxFontSizeMultiplierэтого узла в это значение
| Тип |
|---|
| число |
maxLength
Ограничивает максимальное количество символов, которые можно ввести. Используйте это вместо реализации логики в JS, чтобы избежать мерцания.
| Тип |
|---|
| число |
multiline
Если true, текстовое поле может содержать несколько строк. Значение по умолчанию - false.
Примечание:
Важно отметить, что это выравнивает текст по верху на iOS и по центру на Android. Используйте с textAlignVertical , установленным на top, для одинакового поведения на обеих платформах.
| Тип |
|---|
| логическое значение |
numberOfLines Android
Устанавливает количество строк для TextInput. Используйте его с multiline, установленным на true, чтобы заполнить строки.
| Тип |
|---|
| число |
onBlur
Обработчик, вызываемый, когда текстовое поле теряет фокус.
Примечание: Если вы пытаетесь получить доступ к значению
textизnativeEvent, помните, что полученное значение может бытьundefined, что может привести к непредвиденным ошибкам. Если вы пытаетесь найти последнее значение TextInput, используйте событиеonEndEditing, которое срабатывает по завершении редактирования.
| Тип |
|---|
| функция |
onChange
Обработчик, вызываемый при изменении текста в текстовом поле.
| Тип |
|---|
({ nativeEvent: { eventCount, target, text} }) => void |
onChangeText
Обработчик, вызываемый при изменении текста в текстовом поле. Измененный текст передается как единственный строковый аргумент в обработчик.
| Тип |
|---|
| функция |
onContentSizeChange
Обработчик, вызываемый при изменении размера содержимого текстового поля.
Вызывается только для многострочных текстовых полей.
| Тип |
|---|
({ nativeEvent: { contentSize: { width, height } } }) => void |
onEndEditing
Обработчик, вызываемый при завершении редактирования текстового поля.
| Тип |
|---|
| функция |
onPressIn
Обработчик, вызываемый при нажатии.
| Тип |
|---|
| ({ nativeEvent: PressEvent }) => void |
onPressOut
Обработчик, вызываемый при отпускании.
| Тип |
|---|
| ({ nativeEvent: PressEvent }) => void |
onFocus
Обработчик, вызываемый при получении фокуса текстовым полем.
| Тип |
|---|
| ({ nativeEvent: LayoutEvent }) => void |
onKeyPress
Обработчик, вызываемый при нажатии клавиши. Будет вызван с объектом, где keyValue равно 'Enter' или 'Backspace' для соответствующих клавиш и набранным символом в противном случае, включая ' ' для пробела. Вызывается до onChange обработчиков. Примечание: на Android обрабатываются только ввод с виртуальной клавиатуры, а не ввод с физической клавиатуры.
| Тип |
|---|
({ nativeEvent: { key: keyValue } }) => void |
onLayout
Вызывается при монтировании и при изменениях макета.
| Тип |
|---|
| ({ nativeEvent: LayoutEvent }) => void |
onScroll
Вызывается при прокрутке содержимого. Может также содержать другие свойства из ScrollEvent, но на Android contentSize не предоставляется по соображениям производительности.
| Тип |
|---|
({ nativeEvent: { contentOffset: { x, y } } }) => void |
onSelectionChange
Обработчик, вызываемый при изменении выделения текста в текстовом поле.
| Тип |
|---|
({ nativeEvent: { selection: { start, end } } }) => void |
onSubmitEditing
Обработчик, вызываемый при нажатии кнопки отправки в текстовом поле.
| Тип |
|---|
({ nativeEvent: { text, eventCount, target }}) => void |
Обратите внимание, что на iOS этот метод не вызывается при использовании keyboardType="phone-pad".
placeholder
Строка, которая будет отображаться перед вводом текста.
| Тип |
|---|
| строка |
placeholderTextColor
Цвет текста подсказки.
| Тип |
|---|
| цвет |
returnKeyLabel Android
Устанавливает метку для клавиши возврата. Используйте вместо returnKeyType.
| Тип |
|---|
| строка |
returnKeyType
Определяет, как должна выглядеть клавиша возврата. На Android также можно использовать returnKeyLabel.
На всех платформах
Следующие значения работают на всех платформах:
donegonextsearchsend
Только для Android
Следующие значения работают только на Android:
noneprevious
Только для iOS
Следующие значения работают только на iOS:
defaultemergency-callgooglejoinrouteyahoo
| Тип |
|---|
| перечисление ('done', 'go', 'next', 'search', 'send', 'none', 'previous', 'default', 'emergency-call', 'google', 'join', 'route', 'yahoo') |
rejectResponderTermination iOS
Если true, разрешает TextInput передавать события касания родительскому компоненту. Это позволяет компонентам, таким как SwipeableListView, быть прокручиваемыми через TextInput на iOS, как это по умолчанию на Android. Если false, TextInput всегда запрашивает обработку ввода (кроме случаев отключения). Значение по умолчанию - true.
| Тип |
|---|
| логическое значение |
scrollEnabled iOS
Если false, прокрутка текстового поля будет отключена. Значение по умолчанию - true. Работает только с multiline={true}.
| Тип |
|---|
| логическое значение |
secureTextEntry
Если true, текстовое поле скрывает введенный текст, чтобы чувствительная информация, например, пароли, оставалась защищенной. Значение по умолчанию - false. Не работает с multiline={true}.
| Тип |
|---|
| логическое значение |
selection
Начало и конец выделения в текстовом поле. Установите начало и конец в одно и то же значение, чтобы установить курсор.
| Тип |
|---|
| объект: {start: число,end: число} |
selectionColor
Цвет выделения и курсора текстового поля.
| Тип |
|---|
| цвет |
selectTextOnFocus
Если true, весь текст будет автоматически выделен при получении фокуса.
| Тип |
|---|
| bool |
showSoftInputOnFocus
Когда false, это предотвратит отображение виртуальной клавиатуры при фокусировке на поле. Значение по умолчанию — true.
| Тип |
|---|
| bool |
spellCheck iOS
Если false, отключает стиль проверки правописания (т.е. красные подчеркивания). Значение по умолчанию наследуется от autoCorrect.
| Тип |
|---|
| bool |
textAlign
Выравнивание вводимого текста по левому, центру или правому краю поля ввода.
Возможные значения для textAlign:
leftcenterright
| Тип |
|---|
| enum('left', 'center', 'right') |
textContentType iOS
Предоставление клавиатуре и системе информации о предполагаемом семантическом значении вводимого пользователем контента.
Для iOS 11+ вы можете установить textContentType на username или password для активации автозаполнения данных входа с ключа устройства.
Для iOS 12+ newPassword можно использовать для обозначения нового пароля, который пользователь может сохранить в keychain, а oneTimeCode можно использовать для указания того, что поле может быть автоматически заполнено кодом, пришедшим в SMS.
Для отключения автозаполнения установите textContentType на none.
Возможные значения для textContentType:
noneURLaddressCityaddressCityAndStateaddressStatecountryNamecreditCardNumberemailAddressfamilyNamefullStreetAddressgivenNamejobTitlelocationmiddleNamenamenamePrefixnameSuffixnicknameorganizationNamepostalCodestreetAddressLine1streetAddressLine2sublocalitytelephoneNumberusernamepasswordnewPasswordoneTimeCode
| Тип |
|---|
| enum('none', 'URL', 'addressCity', 'addressCityAndState', 'addressState', 'countryName', 'creditCardNumber', 'emailAddress', 'familyName', 'fullStreetAddress', 'givenName', 'jobTitle', 'location', 'middleName', 'name', 'namePrefix', 'nameSuffix', 'nickname', 'organizationName', 'postalCode', 'streetAddressLine1', 'streetAddressLine2', 'sublocality', 'telephoneNumber', 'username', 'password') |
passwordRules iOS
При использовании textContentType в качестве newPassword на iOS, мы можем сообщить ОС о минимальных требованиях к паролю, чтобы она могла сгенерировать пароль, соответствующий этим требованиям. Чтобы создать корректную строку для PasswordRules, обратитесь к Документации Apple.
Если диалоговое окно для генерации паролей не появляется, убедитесь в следующем:
- Автозаполнение включено: Настройки → Пароли и учётные записи → включить Автозаполнение паролей,
- Используется iCloud Keychain: Настройки → Apple ID → iCloud → Keychain → включить iCloud Keychain.
| Тип |
|---|
| string |
style
Обратите внимание, что не все стили текста поддерживаются. Неподдерживаемые стили включают, но не ограничиваются:
borderLeftWidthborderTopWidthborderRightWidthborderBottomWidthborderTopLeftRadiusborderTopRightRadiusborderBottomRightRadiusborderBottomLeftRadius
Дополнительную информацию см. в Проблеме #7070.
| Тип |
|---|
| Текст |
textBreakStrategy Android
Установите стратегию разбиения текста на Android API Level 23+, возможные значения — simple, highQuality, balanced Значение по умолчанию — simple.
| Тип |
|---|
| enum('simple', 'highQuality', 'balanced') |
underlineColorAndroid Android
Цвет подчеркивания TextInput.
| Тип |
|---|
| цвет |
value
Значение, отображаемое для текстового поля ввода. TextInput — компонент с управлением, что означает, что значение нативного компонента будет принудительно соответствовать значению этого свойства, если оно предоставлено. Для большинства случаев это отлично работает, но в некоторых случаях это может привести к мерцанию — одной из распространённых причин является предотвращение редактирования, сохраняя значение неизменным. В дополнение к установке одинакового значения, установите editable={false}, или установите/обновите maxLength, чтобы предотвратить нежелательные изменения без мерцания.
| Тип |
|---|
| string |
Methods
.focus()
focus();
Запрашивает фокус у нативного поля ввода.
.blur()
blur();
Убирает фокус у нативного поля ввода.
clear()
clear();
Удаляет весь текст из TextInput.
isFocused()
isFocused();
Возвращает true, если поле ввода имеет фокус; false, в противном случае.
Известные проблемы
-
react-native#19096: Не поддерживает
onKeyPreImeAndroid. - react-native#19366: Вызов .focus() после закрытия клавиатуры Android через кнопку «Назад» не вызывает повторное отображение клавиатуры.
-
react-native#26799: Не поддерживает
secureTextEntryAndroid, когдаkeyboardType="email-address"илиkeyboardType="phone-pad".
© 2022 Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
https://reactnative.dev/docs/textinput