从零学React Native之11 TextInput
TextInput 组件是用来通过键盘输入文字,可以使用View组件和Text组件样式,没有自己特定的样式。
与Text组件类似,TextInput组件内部的元素不再使用FlexBox布局,而采用文本布局。详情见上一篇文章从零学React Native之10Text
TextInput属性
只列出了一些常用的,详情见官网
| 属性名 | 描述 |
|---|---|
| defaultValue | 字符类型,定义TextInput组件中的字符串默认值 |
| autoCorrect | 布尔类型,是否自动更正用户输入,默认是true |
| autoFocus | 是否自动获取焦点,默认为false |
| editable | 布尔类型,是否允许修改组件内字符,false代表不能修改 |
| keyboardType | 字符串类型,取值包括’default’, ‘email-address’, ‘numeric’, ‘phone-pad’, ( ‘ascii-capable’, ‘numbers-and-punctuation’, ‘url’, ‘number-pad’, ‘name-phone-pad’, ‘decimal-pad’, ‘twitter’, ‘web-search’)括号里的只支持ios平台 |
| MaxLength | 数值类型,定义TextInput最多允许用户输入多少个字符 |
| multiline | 布尔类型,是否允许多行显示,默认值false |
| placeholder | TextInput无文字的时候显示的提示内容 |
| placeholderTextColor | placeholder文字颜色,建议不用修改 |
| secureTextEntry | 布尔类型 true按照密码样式显示,默认是false |
| value | 字符串类型,设置TextInput里面的值,目前有可能带来屏幕闪烁,可以用defaultValue临时代替 |
| onSubmitEditing | 用户点击提交键的时候调用,如果允许多行显示,该属性失效 |
| onContentSizeChange | 内容长度发生变化的时候,只会在多行显示的时候生效 |
| onChangeText | 内容长度发生变化的时候调用 |
下面的例子
class UselessTextInput extends Component {
constructor(props) {
super(props);
this.state = { text: 'Useless Placeholder' };
}
render() {
return (
<TextInput
style={{marginTop:100,height: 40, borderColor: 'gray', borderWidth: 1}}
onChangeText={(text) => this.setState({text})}
value={this.state.text}
/>
);
}
}
// App registration and rendering
AppRegistry.registerComponent('AwesomeProject', () => UselessTextInput);
IOS运行结果:
Android运行结果:
两个平台不同表现
对比发现 Android端 borderWidth是不生效的,默认有一个输入的线,符合Android设计,Android字体默认很小,我们把上面样式中的height换成fontSize,来看下
<TextInput
style={{marginTop:100,fontSize: 40, borderColor: 'gray', borderWidth: 1}}
onChangeText={(text) => this.setState({text})}
value={this.state.text}/>
可以看到Android端字体变大了,但是IOS端没有了
左面是IOS右面Android
IOS平台上,没有指定height,TextInput组件不会显示。
一般情况下,我们需要指定FontSize和height,当上下padding为0的时候,height至少是FontSize的1.1倍时Android端才能保证字体完全显示。而默认Android端是有padding的。
如下面的代码可以基本适配两个平台:
render() {
return (
<TextInput
style={{marginTop:100,
fontSize:30,height:43,
borderColor: 'gray', borderWidth: 1,
paddingBottom:5,paddingTop:5}}
onChangeText={(text) => this.setState({text})}
value={this.state.text}
/>
);
}
TextInput组件的生命周期和回调方法
- 当用户点击输入框时,onFocus调用,获取焦点
- 当用户输入的时候onChangeText和onChange回调,一般使用onChangeText,里面参数为输入的文本
- 当用户按下提交键,onSubmitEditing回调,多行没有提交键
- 当组件失去焦点,onEndEditing或onBlur调用,一般情况用onEndEditing就足够了
注意:当点击点击另一个TextInput组件时会触发失去焦点事件,在单行的输入框中按下提交键,Android端不触发失去焦点事件。
最方便的操作就在onChangeText事件中时刻获取用户输入的内容
更多精彩请关注微信公众账号likeDev
从零学React Native之11 TextInput的更多相关文章
- 从零学React Native之03页面导航
之前我们介绍了RN相关的知识: 是时候了解React Native了 从零学React Native之01创建第一个程序 从零学React Native之02状态机 本篇主要介绍页面导航 上一篇文章给 ...
- 从零学React Native之02状态机
本篇文章首发于简书 欢迎关注 之前我们介绍了RN相关的知识: 是时候了解React Native了 从零学React Native之01创建第一个程序 本篇文章主要介绍下下面的知识: 1.简单界面的搭 ...
- 从零学React Native之13 持久化存储
数据持久化就是指应用程序将某些数据存储在手机存储空间中. 借助native存储 这种方式不言而喻,就是把内容传递给native层,通过原生API存储,详见从零学React Native之05混合开发 ...
- 从零学React Native之04自定义对话框
本篇主要介绍: 1. 自定义组件 2. Alert 对话框 自定义对话框 之前的我都是利用React Native提供的基础组件对它们进行排列组合, 其实自定义也很简单, 我们还是拿上一篇文章的例子进 ...
- 从零学React Native之14 网络请求
通过HTTP或者HTTPS协议与网络侧服务器交换数据是移动应用中常见的通信方式. node-fetch是RN推荐的请求方式. React Native框架在初始化项目时, 引入了node-fetch包 ...
- 从零学React Native之08Image组件
开发过程中, 几乎每个项目都会用到图片. RN就是通过Image组件显示图片.既可以加载网络图片,也可以加载本地资源图片. Image组件必须在样式中声明图片的款和高.如果没有声明,则图片将不会被呈现 ...
- 从零学React Native之07View
View 组件是React Native最基本的组件.绝大部分其他React Native 组件. View组件的颜色和边框 backgroundColor 键用来指定颜色. RN 0.19版本开始, ...
- 从零学React Native之12 组件的生命周期
一个React Native组件从它被加载,到最终被卸载会经历一个完整的生命周期.所谓生命周期,就是一个对象从开始生成到最后消亡所经历的状态,理解生命周期,是合理开发的关键. ES6语法和之前的ES5 ...
- 从零学React Native之10Text
在React Native开发中,所有需要显示的字符串文本都需要放置在Text或者Text的子组件中.虽然在之前的文章中多次使用了Text组件,但是Text组件还是值得专门学习的, 并没有想象中的那么 ...
随机推荐
- openldap 2.4 centos7 常用配置
新版的openldap弃用了sldap.conf配置文件,引入一种动态配置,所以尽量不要直接修改配文件 如果直接修改了配置文件可以用slaptest -u命令检查 1.安装openldap,可能需要e ...
- 【html、CSS、javascript-9】jquery-选择器及过滤器
一.选择器与过滤器 选择器 实例 选取 * $("*") 所有元素 #id $("#lastname") id="lastname" 的元素 ...
- Spring配置xml自动提示——转载https://blog.csdn.net/sinat_18474835/article/details/79370629
以Spring2.0为例: 下载地址: Csdn: http://download.csdn.net/download/hh775313602/9812757 没积分的可以去百度网盘下载,我已共享: ...
- TZ_01MyBatis_SqlMapConfig.xml
1.sqlMapConfig的配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE conf ...
- HTTP协议详解(经典)
转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...
- float示例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- python 3.0读取文件出现编码错误(illegal multibyte sequence )
代码如下: myfile2=open('e:/enterprise.xlsx',mode = 'r') file2_content=myfile2.readlines() print(file2_co ...
- 请问“javascript:;”是什么意思?
请问“javascript:;”是什么意思? 最佳答案 就是 执行一段 空白JAVASCRIPT语句 并且返回的也是空或者false值..把 javascript:; 加在超级链接上 就可以防 ...
- MySQL数据库起步 linux安装(更新中...)
卸载mysql! [root@localhost usr]# yum remove mysql mysql-server mysql-libs compat-mysql51 [root@localho ...
- 备忘录模式(Memento、Originator、Caretaker)(状态保存,备份恢复)
定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样就可以将该对象恢复到原先保存的状态 类型:行为类 类图: 我们在编程的时候,经常需要保存对象的中间状态,当需要的时 ...