相關文章
React Native探索系列
React Native組件系列html
TextInput組件和Text組件相似,內部都沒有使用FlexBox佈局,不一樣的是TextInput組件支持文字的輸入,由於支持文字輸入, TextInput組件要比Text組件多了一些屬性和方法。TextInput組件支持Text組件全部的Style屬性,而TextInput組件自己是沒有特有的Style屬性的。
node
TextInput組件支持全部的View組件的屬性,除此以外,它還有許多其餘屬性。react
當輸入框的內容發生變化時,就會調用onChangeText。
index.android.jsandroid
import React, {Component} from 'react';
import {AppRegistry, StyleSheet, View, TextInput, Button,Alert} from 'react-native';
class TextApp extends Component {
constructor(props) {
super(props);
this.state = {
searchText: ""
}
}
render() {
return (
<View style={styles.container}>
<View style={styles.searchBar}>
<TextInput style={styles.input} placeholder='請輸入內容'
onChangeText={(text) => {
this.setState({searchText: text});
}}/>
<Button style={styles.button} title='搜索'
onPress={ () => {
Alert.alert('輸入的內容爲:' + this.state.searchText);
}
}/>
</View>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
searchBar: {
flexDirection: 'row',
height: 45,
justifyContent: 'center',
alignItems: 'center'
},
input: {
flex: 1,
borderColor: 'gray'
},
button: {
flex: 1
}
});
AppRegistry.registerComponent('ViewSample', () => TextApp);複製代碼
上面的例子咱們用到了TextInput組件的onChangeText屬性,當咱們在TextInput中輸入內容時,這個內容就會經過onChangeText的參數text傳遞回來,在onChangeText中將text的內容保存到state中。當咱們點擊Button時,經過Alert將state中保存的內容展示出來。
運行程序效果以下圖所示。ios
在輸入框中輸入Android,點擊搜索Button,能夠看到輸入的Android展現到了Alert中。git
當輸入框的內容發生變化時,也會調用onChange,只不過它所返回的參數是一個event,咱們來改寫2.1的代碼:github
...
<TextInput style={styles.input} placeholder='請輸入內容' keyboardType='default'
onChange={(event) => {
this.setState({searchText: event.nativeEvent.text});
}}/>
...複製代碼
經過event.nativeEvent.text能夠獲得用戶輸入的內容,若是隻是想要獲得用戶輸入的內容,仍是用onChangeText比較合適。web
keyboardType用於設置彈出軟鍵盤的類型。它的取值爲範圍爲: enum('default', 'email-address', 'numeric', 'phone-pad', 'ascii-capable', 'numbers-and-punctuation', 'url', 'number-pad', 'name-phone-pad', 'decimal-pad', 'twitter', 'web-search') ,其中default、numeric、email-address和phone-pad是跨平臺。react-native
...
<TextInput style={styles.input} placeholder='請輸入內容' keyboardType='phone-pad'
onChangeText={(text) => {
this.setState({searchText: text});
}}/>
...複製代碼
將keyboardType的值設置爲phone-pad,效果以下圖所示。
api
若是blurOnSubmit值爲true,文本框會在按下提交鍵時失去焦點。對於單行輸入框,blurOnSubmit默認值爲true,多行則爲false。
在單行的狀況下,點擊鍵盤上的提交按鈕時,TextInput的效果以下圖所示。
...
<TextInput style={styles.input} placeholder='請輸入內容' blurOnSubmit={false}
onChangeText={(text) => {
this.setState({searchText: text});
}}/>
...複製代碼
點擊鍵盤上的提交按鈕時,TextInput的效果以下圖所示。
當提交鍵被按下時會調用onSubmitEditing,若是multiline等於true,則此屬性不可用。
...
<TextInput style={styles.input} placeholder='請輸入內容' blurOnSubmit={true} multiline={false}
onChangeText={(text) => {
this.setState({searchText: text});
}}
onSubmitEditing={(event) => {
console.log(event.nativeEvent.text);
}}
/>
...複製代碼
運行程序並在App的開發菜單中選擇Debug JS Remotely,這時咱們輸入Android並按下提交鍵,在Console控制檯中就會輸出結果。(筆者用的是WebStorm)
用於設置軟鍵盤迴車鍵的樣式,Android平臺可使用returnKeyLabel來設置軟鍵盤迴車鍵的內容。
returnKeyType的取值爲enum('done', 'go', 'next', 'search', 'send', 'none', 'previous', 'default', 'emergency-call', 'google', 'join', 'route', 'yahoo')。
其中跨平臺的取值有:done、next、search、send。
Android平臺獨有:none、previous。
iOS平臺獨有:default、emergency-call、google、join、route、yahoo。
若是咱們將returnKeyType設置爲go時,效果以下圖所示。
returnKeyType設置爲send時,效果以下圖所示。
屬性名 | 取值 | 說明 |
---|---|---|
autoCapitalize | enum('none', 'sentences', 'words', 'characters') | 設置英文字母自動大寫規則,取值分別表示:不自動大寫、每句話首字母自動大寫、每一個單詞首字母大寫、所有字母自動大寫 |
autoCorrect | bool | 是否會自動檢測用戶輸入的英語單詞正確性,默認值爲true |
autoFocus | bool | 若是爲true,在componentDidMount後會得到焦點。默認值爲false。 |
defaultValue | string | 字符初始值,當用戶開始輸入時,該值將改變 |
placeholder | node | 文本輸入以前將呈現的字符串,多用於提示用戶應該輸入什麼 |
placeholderTextColor | color | 文本輸入以前將呈現的字符串的顏色 |
editable | bool | 是否容許修改字符,默認值爲true |
maxLength | number | 最多容許用戶輸入多少字符 |
caretHidden | bool | 若是爲true,則隱藏光標 |
multiline | bool | 若是爲true,則文本輸入能夠是多行的,默認值爲false |
secureTextEntry | bool | 文本框是否用於輸入密碼,默認值爲false |
selectTextOnFocus | bool | 若是爲true,則文本框獲取焦點時,組件中的內容會被自動選中 |
onFocus | function | 當文本框得到焦點的時候調用此回調函數 |
onEndEditing | function | 當文本輸入結束後調用此回調函數 |
onLayout | function | 當組件掛載或者佈局變化的時候調用,參數爲{x, y, width, height} |
onScroll | function | 在內容滾動時持續調用,傳回參數的格式形如{ nativeEvent: { contentOffset: { x, y } } } |
onSelectionChange | function | 長按選擇文本時,選擇範圍變化時調用此函數,傳回參數的格式形如 { nativeEvent: { selection: { start, end } } } |
value | string | 文本框中的文字內容 |
屬性名 | 取值 | 說明 |
---|---|---|
inlineImageLeft | string | 指定一個圖片放置在左側 |
inlineImagePadding | number | 左側圖片的Padding(若是有的話),以及文本框自己的Padding |
numberOfLines | number | TextInput的行數 |
underlineColorAndroid | string | TextInput的下劃線顏色 |
returnKeyLabel | string | 設置軟鍵盤迴車鍵的內容,優先級高於returnKeyType |
disableFullscreenUI | bool | 值爲false時(默認值),若是TextInput的輸入空間小,系統可能會進入全屏文本輸入模式 |
屬性名 | 取值 | 說明 |
---|---|---|
clearButtonMode | enum('never', 'while-editing', 'unless-editing', 'always') | 什麼時候在文本框右側顯示清除按鈕 |
clearTextOnFocus | bool | 若是爲true,每次開始輸入的時候都會清除文本框的內容 |
keyboardAppearance | enum('default', 'light', 'dark') | 鍵盤的顏色 |
onKeyPress | function | 一個鍵被按下的時候調用此回調,傳遞給回調函數的參數爲{ nativeEvent: { key: keyValue } } |
spellCheck | bool | 若是爲false,則禁用拼寫檢查的樣式(好比紅色下劃線) |
enablesReturnKeyAutomatically | bool | 若是爲true,鍵盤會在文本框內沒有文字的時候禁用確認按鈕 ,默認值爲false |
clear用於清空輸入框的內容。
想要使用組件的方法則須要使用組件的引用,例子以下所示。
...
render() {
return (
<View style={styles.container}>
<View style={styles.searchBar}>
<TextInput style={styles.input} ref="textInputRefer" placeholder='請輸入內容' blurOnSubmit={true}
returnKeyType='send'
onChangeText={(text) => {
this.setState({searchText: text});
}}
/>
<Button style={styles.button} title='清除'
onPress={ () => {
this.refs.textInputRefer.clear();
}
}/>
</View>
</View>
);
}
...複製代碼
在TextInput標籤中定義引用的名稱:ref="textInputRefer"
,這樣咱們經過 this.refs.textInputRefer
就能夠獲得TextInput 組件的引用。在Button的onPress函數中,調用了TextInput的clear方法,這樣當咱們點擊「清除」按鈕時,文本框中的內容就會被清除。
返回值代表當前輸入框是否得到了焦點。
好了,到這裏TextInput組件就介紹到這裏,還有一些沒有列出的屬性請查看官方文檔。
參考資料
官方文檔
《React Native跨平臺移動應用開發》第二版
《React Native 移動開發實戰》
React Native-組件的引用
歡迎關注個人微信公衆號,第一時間得到博客更新提醒,以及更多成體系的Android相關原創技術乾貨。
掃一掃下方二維碼或者長按識別二維碼,便可關注。