跳到主要內容

TextInput

一個基礎元件,用於透過鍵盤將文字輸入到應用程式中。Props 為多項功能提供可配置性,例如自動校正、自動大寫、佔位符文字,以及不同的鍵盤類型,例如數字鍵盤。

最基本的使用案例是放置一個 TextInput 並訂閱 onChangeText 事件以讀取使用者輸入。還有其他事件可以訂閱,例如 onSubmitEditingonFocus。一個最小的範例

透過原生元素公開的兩個方法是 .focus().blur(),它們將以程式設計方式聚焦或模糊化 TextInput。

請注意,某些 props 僅在 multiline={true/false} 的情況下可用。此外,如果 multiline=true,則僅適用於元素一側的邊框樣式(例如,borderBottomColorborderLeftWidth 等)將不會被套用。若要達到相同的效果,您可以將 TextInput 包裹在 View

TextInput 預設在其視圖底部有一個邊框。此邊框的 padding 由系統提供的背景圖片設定,且無法變更。避免此問題的解決方案是不明確設定高度,在這種情況下,系統會負責在正確位置顯示邊框,或者透過將 underlineColorAndroid 設定為 transparent 來不顯示邊框。

請注意,在 Android 上,在輸入中執行文字選取可能會將應用程式的 activity windowSoftInputMode 參數變更為 adjustResize。這可能會導致在鍵盤處於活動狀態時,位置為 'absolute' 的元件出現問題。若要避免此行為,請在 AndroidManifest.xml 中指定 windowSoftInputMode ( https://developer.android.com/guide/topics/manifest/activity-element.html ) 或使用原生程式碼以程式設計方式控制此參數。


參考

Props

View Props

繼承 View Props


allowFontScaling

指定字體是否應縮放以符合「文字大小」輔助功能設定。預設值為 true

類型
bool

autoCapitalize

告知 TextInput 自動將某些字元大寫。某些鍵盤類型(例如 name-phone-pad)不支援此屬性。

  • characters:所有字元。
  • words:每個字詞的首字母。
  • sentences:每個句子的首字母(預設)。
  • none:不要自動將任何內容大寫。
類型
enum('none', 'sentences', 'words', 'characters')

autoComplete

指定系統的自動完成提示,以便它可以提供自動填寫。在 Android 上,系統將始終嘗試使用啟發法來識別內容類型以提供自動填寫。若要停用自動完成,請將 autoComplete 設定為 off

以下值適用於跨平台

  • additional-name
  • address-line1
  • address-line2
  • birthdate-day (iOS 17+)
  • birthdate-full (iOS 17+)
  • birthdate-month (iOS 17+)
  • birthdate-year (iOS 17+)
  • cc-csc (iOS 17+)
  • cc-exp (iOS 17+)
  • cc-exp-day (iOS 17+)
  • cc-exp-month (iOS 17+)
  • cc-exp-year (iOS 17+)
  • cc-number
  • country
  • current-password
  • email
  • family-name
  • given-name
  • honorific-prefix
  • honorific-suffix
  • name
  • new-password
  • off
  • one-time-code
  • postal-code
  • street-address
  • tel
  • username
iOS

以下值僅適用於 iOS

  • cc-family-name (iOS 17+)
  • cc-given-name (iOS 17+)
  • cc-middle-name (iOS 17+)
  • cc-name (iOS 17+)
  • cc-type (iOS 17+)
  • nickname
  • organization
  • organization-title
  • url
Android

以下值僅適用於 Android

  • gender
  • 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
  • sms-otp
  • tel-country-code
  • tel-device
  • tel-national
  • username-new
類型
enum('additional-name', 'address-line1', 'address-line2', 'birthdate-day', 'birthdate-full', 'birthdate-month', 'birthdate-year', 'cc-csc', 'cc-exp', 'cc-exp-day', 'cc-exp-month', 'cc-exp-year', 'cc-number', 'country', 'current-password', 'email', 'family-name', 'given-name', 'honorific-prefix', 'honorific-suffix', 'name', 'new-password', 'off', 'one-time-code', 'postal-code', 'street-address', 'tel', 'username', 'cc-family-name', 'cc-given-name', 'cc-middle-name', 'cc-name', 'cc-type', 'nickname', 'organization', 'organization-title', 'url', 'gender', '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', 'sms-otp', 'tel-country-code', 'tel-device', 'tel-national', 'username-new')

autoCorrect

若為 false,則停用自動校正。預設值為 true

類型
bool

autoFocus

若為 true,則聚焦輸入框。預設值為 false

類型
bool

blurOnSubmit

已棄用。 請注意,submitBehavior 現在取代了 blurOnSubmit,並將覆寫 blurOnSubmit 定義的任何行為。請參閱 submitBehavior

若為 true,則文字欄位在提交時會模糊化。單行欄位的預設值為 true,多行欄位的預設值為 false。請注意,對於多行欄位,將 blurOnSubmit 設定為 true 表示按下 return 鍵將會模糊化欄位並觸發 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'), ,enum('phoneNumber', 'link', 'address', 'calendarEvent', 'none', 'all') 的陣列

defaultValue

提供一個初始值,該值將在使用者開始輸入時變更。對於您不想處理監聽事件和更新 value prop 以保持受控狀態同步的使用案例很有用。

類型
string

cursorColor
Android

提供時,它將設定元件中游標(或「插入符號」)的顏色。與 selectionColor 的行為不同,游標顏色將獨立於文字選取框的顏色設定。

類型
color

disableFullscreenUI
Android

false 時,如果文字輸入周圍有少量可用空間(例如手機上的橫向方向),則作業系統可能會選擇讓使用者在全螢幕文字輸入模式下編輯文字。當 true 時,此功能會停用,使用者將始終直接在文字輸入框內編輯文字。預設為 false

類型
bool

editable

若為 false,則文字不可編輯。預設值為 true

類型
bool

enablesReturnKeyAutomatically
iOS

若為 true,則鍵盤會在沒有文字時停用 return 鍵,並在有文字時自動啟用它。預設值為 false

類型
bool

enterKeyHint

決定應向 return 鍵顯示的文字。優先於 returnKeyType prop。

以下值適用於跨平台

  • enter
  • done
  • next
  • search
  • send

僅限 Android

以下值僅適用於 Android

  • previous
類型
enum('enter', 'done', 'next', 'previous', 'search', 'send')

importantForAutofill
Android

告知作業系統,您的應用程式中的個別欄位是否應包含在 Android API Level 26+ 的自動填寫目的的視圖結構中。可能的值為 autononoExcludeDescendantsyesyesExcludeDescendants。預設值為 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

內嵌影像(如果有的話)與文字輸入本身之間的 padding。

類型
number

inputAccessoryViewID
iOS

一個可選的識別碼,將自訂的 InputAccessoryView 連結到此文字輸入框。當此文字輸入框聚焦時,InputAccessoryView 會在鍵盤上方呈現。

類型
string

inputMode

作用類似於 HTML 中的 inputmode 屬性,它決定要開啟哪個鍵盤,例如 numeric,並且優先於 keyboardType

支援以下值

  • none
  • text
  • decimal
  • numeric
  • tel
  • search
  • email
  • url
類型
enum('decimal', 'email', 'none', 'numeric', 'search', 'tel', 'text', 'url')

keyboardAppearance
iOS

決定鍵盤的顏色。

類型
enum('default', 'light', 'dark')

keyboardType

決定要開啟哪個鍵盤,例如 numeric

在此處查看所有類型的螢幕截圖 這裡

以下值適用於跨平台

  • default
  • number-pad
  • decimal-pad
  • numeric
  • email-address
  • phone-pad
  • url

僅限 iOS

以下值僅適用於 iOS

  • ascii-capable
  • numbers-and-punctuation
  • name-phone-pad
  • twitter
  • web-search

僅限 Android

以下值僅適用於 Android

  • visible-password
類型
enum('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 設定為此值
類型
number

maxLength

限制可以輸入的最大字元數。使用此屬性而不是在 JS 中實作邏輯以避免閃爍。

類型
number

multiline

若為 true,則文字輸入框可以是多行的。預設值為 false

注意

請務必注意,這會在 iOS 上將文字對齊到頂部,並在 Android 上將其置中。搭配設定為 toptextAlignVertical 使用,以在兩個平台上獲得相同的行為。

類型
bool

numberOfLines
Android

設定 TextInput 的行數。將其與設定為 true 的 multiline 一起使用,以便能夠填滿這些行。

類型
number

onBlur

當文字輸入框失去焦點時呼叫的回呼函數。

注意:如果您嘗試從 nativeEvent 存取 text 值,請記住您獲得的結果值可能是 undefined,這可能會導致意外錯誤。如果您嘗試尋找 TextInput 的最後一個值,您可以使用 onEndEditing 事件,該事件會在編輯完成時觸發。

類型
function

onChange

當文字輸入框的文字變更時呼叫的回呼函數。

類型
({nativeEvent: {eventCount, target, text}}) => void

onChangeText

當文字輸入框的文字變更時呼叫的回呼函數。變更後的文字會作為單一字串引數傳遞至回呼處理常式。

類型
function

onContentSizeChange

當文字輸入框的內容大小變更時呼叫的回呼函數。

僅針對多行文字輸入框呼叫。

類型
({nativeEvent: {contentSize: {width, height} }}) => void

onEndEditing

當文字輸入結束時呼叫的回呼函數。

類型
function

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

請注意,當使用 keyboardType="phone-pad" 時,不會在 iOS 上呼叫此方法。


placeholder

在輸入文字之前將呈現的字串。

類型
string

placeholderTextColor

佔位符字串的文字顏色。

類型
color

readOnly

若為 true,則文字不可編輯。預設值為 false

類型
bool

returnKeyLabel
Android

將 return 鍵設定為標籤。使用它來代替 returnKeyType

類型
string

returnKeyType

決定 return 鍵應有的外觀。在 Android 上,您也可以使用 returnKeyLabel

跨平台

以下值適用於跨平台

  • done
  • go
  • next
  • search
  • send

僅限 Android

以下值僅適用於 Android

  • none
  • previous

僅限 iOS

以下值僅適用於 iOS

  • default
  • emergency-call
  • google
  • join
  • route
  • yahoo
類型
enum('done', 'go', 'next', 'search', 'send', 'none', 'previous', 'default', 'emergency-call', 'google', 'join', 'route', 'yahoo')

rejectResponderTermination
iOS

若為 true,則允許 TextInput 將觸控事件傳遞給父元件。這允許諸如 SwipeableListView 之類的元件可以從 iOS 上的 TextInput 滑動,就像 Android 上的預設情況一樣。若為 false,則 TextInput 始終要求處理輸入(除非停用)。預設值為 true

類型
bool

rows
Android

設定 TextInput 的行數。將其與設定為 true 的 multiline 一起使用,以便能夠填滿這些行。

類型
number

scrollEnabled
iOS

若為 false,則會停用文字檢視的滾動。預設值為 true。僅適用於 multiline={true}

類型
bool

secureTextEntry

若為 true,則文字輸入框會遮蔽輸入的文字,以便密碼等敏感文字保持安全。預設值為 false。不適用於 multiline={true}

類型
bool

selection

文字輸入框選取範圍的開始和結束位置。將 start 和 end 設定為相同的值以定位游標。

類型
object: {start: number,end: number}

selectionColor

文字輸入框的醒目提示、選取控制點和游標顏色。

類型
color

selectionHandleColor
Android

設定選取控制點的顏色。與 selectionColor 不同,它允許獨立於選取範圍的顏色自訂選取控制點顏色。

類型
color

selectTextOnFocus

若為 true,則所有文字將在聚焦時自動選取。

類型
bool

showSoftInputOnFocus

false 時,它將阻止在欄位聚焦時顯示軟體鍵盤。預設值為 true

類型
bool

spellCheck
iOS

若為 false,則停用拼字檢查樣式(即紅色底線)。預設值繼承自 autoCorrect

類型
bool

submitBehavior

當按下 return 鍵時,

對於單行輸入框

  • 'newline' 預設為 'blurAndSubmit'
  • undefined 預設為 'blurAndSubmit'

對於多行輸入框

  • 'newline' 新增換行符號
  • undefined 預設為 'newline'

對於單行和多行輸入框

  • 'submit' 將僅傳送提交事件,而不會模糊化輸入框
  • 'blurAndSubmit' 將同時模糊化輸入框並傳送提交事件
類型
enum('submit', 'blurAndSubmit', 'newline')

textAlign

將輸入文字對齊到輸入欄位的左側、中心或右側。

textAlign 的可能值為

  • left
  • center
  • right
類型
enum('left', 'center', 'right')

textContentType
iOS

提供鍵盤和系統關於使用者輸入內容的預期語義含義的資訊。

注意

autoComplete,提供相同的功能,並且適用於所有平台。您可以針對不同的平台行為使用 Platform.select

避免同時使用 textContentTypeautoComplete。為了向後相容性,當同時設定這兩個屬性時,textContentType 優先。

您可以將 textContentType 設定為 usernamepassword,以啟用從裝置鑰匙鏈自動填寫登入詳細資訊。

newPassword 可用於指示使用者可能想要儲存在鑰匙鏈中的新密碼輸入,而 oneTimeCode 可用於指示欄位可以由 SMS 中收到的程式碼自動填寫。

若要停用自動填寫,請將 textContentType 設定為 none

textContentType 的可能值為

  • none
  • addressCity
  • addressCityAndState
  • addressState
  • birthdate (iOS 17+)
  • birthdateDay (iOS 17+)
  • birthdateMonth (iOS 17+)
  • birthdateYear (iOS 17+)
  • countryName
  • creditCardExpiration (iOS 17+)
  • creditCardExpirationMonth (iOS 17+)
  • creditCardExpirationYear (iOS 17+)
  • creditCardFamilyName (iOS 17+)
  • creditCardGivenName (iOS 17+)
  • creditCardMiddleName (iOS 17+)
  • creditCardName (iOS 17+)
  • creditCardNumber
  • creditCardSecurityCode (iOS 17+)
  • creditCardType (iOS 17+)
  • emailAddress
  • familyName
  • fullStreetAddress
  • givenName
  • jobTitle
  • location
  • middleName
  • name
  • namePrefix
  • nameSuffix
  • newPassword
  • nickname
  • oneTimeCode
  • organizationName
  • password
  • postalCode
  • streetAddressLine1
  • streetAddressLine2
  • sublocality
  • telephoneNumber
  • URL
  • username
類型
enum('none', 'addressCity', 'addressCityAndState', 'addressState', 'birthdate', 'birthdateDay', 'birthdateMonth', 'birthdateYear', 'countryName', 'creditCardExpiration', 'creditCardExpirationMonth', 'creditCardExpirationYear', 'creditCardFamilyName', 'creditCardGivenName', 'creditCardMiddleName', 'creditCardName', 'creditCardNumber', 'creditCardSecurityCode', 'creditCardType', 'emailAddress', 'familyName', 'fullStreetAddress', 'givenName', 'jobTitle', 'location', 'middleName', 'name', 'namePrefix', 'nameSuffix', 'newPassword', 'nickname', 'oneTimeCode', 'organizationName', 'password', 'postalCode', 'streetAddressLine1', 'streetAddressLine2', 'sublocality', 'telephoneNumber', 'URL', 'username')

passwordRules
iOS

當在 iOS 上將 textContentType 用作 newPassword 時,我們可以讓作業系統知道密碼的最低要求,以便它可以產生一個符合要求的密碼。為了為 PasswordRules 建立有效的字串,請參閱 Apple 文件

如果密碼產生對話方塊未出現,請確保

  • 已啟用自動填寫:設定密碼與帳號 → 切換「開啟」自動填寫密碼
  • 已使用 iCloud 鑰匙鏈:設定Apple IDiCloud鑰匙鏈 → 切換「開啟」iCloud 鑰匙鏈
類型
string

style

請注意,並非所有文字樣式都受支援,不受支援的不完整清單包括

  • borderLeftWidth
  • borderTopWidth
  • borderRightWidth
  • borderBottomWidth
  • borderTopLeftRadius
  • borderTopRightRadius
  • borderBottomRightRadius
  • borderBottomLeftRadius

樣式

類型
Text

textBreakStrategy
Android

在 Android API Level 23+ 上設定文字換行策略,可能的值為 simplehighQualitybalanced。預設值為 highQuality

類型
enum('simple', 'highQuality', 'balanced')

underlineColorAndroid
Android

TextInput 底線的顏色。

類型
color

value

要顯示為文字輸入框的值。TextInput 是一個受控元件,這表示如果提供此值 prop,則原生值將強制與此值 prop 相符。對於大多數用途來說,這效果很好,但在某些情況下,這可能會導致閃爍 - 一個常見原因是透過保持值不變來防止編輯。除了設定相同的值之外,還可以設定 editable={false},或設定/更新 maxLength 以防止不必要的編輯而不閃爍。

類型
string

lineBreakStrategyIOS
iOS

在 iOS 14+ 上設定換行策略。可能的值為 nonestandardhangul-wordpush-out

類型預設
enum('none', 'standard', 'hangul-word', 'push-out')'none'

disableKeyboardShortcuts
iOS

若為 true,則會停用鍵盤快速鍵(復原/重做和複製按鈕)。預設值為 false

類型
bool

方法

.focus()

tsx
focus();

使原生輸入請求聚焦。

.blur()

tsx
blur();

使原生輸入失去焦點。

clear()

tsx
clear();

TextInput 中移除所有文字。


isFocused()

tsx
isFocused(): boolean;

如果輸入目前已聚焦,則傳回 true;否則傳回 false

已知問題

  • react-native#19096: 不支援 Android 的 onKeyPreIme
  • react-native#19366: 在透過返回按鈕關閉 Android 鍵盤後呼叫 .focus() 不會再次彈出鍵盤。
  • react-native#26799: 當 keyboardType="email-address"keyboardType="phone-pad" 時,不支援 Android 的 secureTextEntry