基础篇章:React Native 之 TextInput 的讲解

(友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间)

今天我们讲解的是React Native基础系列之TextInput的讲解,如果想学习更多的开发知识或者移动开发文章,欢迎大家关注我的微信公众号:非著名程序员(smart_android)。

TextInput 是一个允许用户输入文本的基础组件。它有一个onChangeText的属性,该属性接受一个函数,每当文本输入发生变化时,此函数就会被调用。它还有一个onSubmitEditing的属性,当文本输入完被提交的时候调用。

官网例子

import React, { Component } from 'react';
import { AppRegistry, Text, TextInput, View } from 'react-native';

class PizzaTranslator extends Component {
  constructor(props) {
    super(props);
    this.state = {text: ''};
  }

  render() {
    return (
      <View style={{padding: 10}}>
        <TextInput
          style={{height: 40}}
          placeholder="Type here to translate!"
          onChangeText={(text) => this.setState({text})}
        />
        <Text style={{padding: 10, fontSize: 42}}>
          {this.state.text.split(' ').map((word) => word && '?').join(' ')}
        </Text>
      </View>
    );
  }
}

AppRegistry.registerComponent('PizzaTranslator', () => PizzaTranslator);

效果图如下:

这个例子实现的功能就是当我们在文本输入框里输入一个单词时,该单词就会换成?,如果输入的是一句话或者很多单词,就会实时动态的把一句话拆成以一个一个的单词,然后替换成?。比如:"Hello there Bob"将会被翻译为"???"。

解释

如果你们不懂js的话,可能看着有点困难,所以学React Native的时候,大家最好先去看看js,至少得懂一些。

  • 逻辑与 aa && bb 这里的意思是逻辑与的操作,如果逻辑与是true,则返回前面的aa,如果是false,则返回bb。这回懂了 word && '?' 这个的意思了吧?
  • [].map() 基本用法跟forEach方法类似,循环遍历数组,然后返回新的数组
  • join() arrayObject.join(separator),返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的。

再说一遍,以后就不解释了,不懂js语法的自行去学习。

属性方法

  • autoCapitalize: 控制输入框输入时字符的大写,参数有:'none', 'sentences', 'words', 'characters'。
    • none:不自动切换任何字符成大写
    • sentences:默认句话的首字母变成大写
    • words:每个单词的首字母变成大写
    • characters:每个字母全部变成大写
  • placeholder:占位符,默认显示信息,在输入前显示的文本内容。相当于android中的hint,当有输入的内容时被清除。
  • placeholdertTextColor: 占位符文本颜色。
  • value: 文本输入框的默认值。
  • password: 如果为true ,则是密码输入框,文本显示为***。
  • multiline: 如果为true , 则是多行输入。
  • editable: 如果为false , 文本框不可输入。其默认值事true。
  • autoFocus: 如果为true, 将自动聚焦。
  • clearButtonMode : 枚举类型,可选值有never,while-enditing , unless-editing,always。用于显示清除按钮。
  • maxLength: 输入文本框能够输入的最长字符数。
  • keyboardType:输入框的键盘类型(可选参数:"default", 'email-address', 'numeric', 'phone-pad', "ascii-capable", 'numbers-and-punctuation', 'url', 'number-pad', 'name-phone-pad', 'decimal-pad', 'twitter', 'web-search') 该功能用来选择默认弹出键盘的类型例如我们甚至numeric就是弹出数字键盘。
  • onChangeText: 当文本输入框的内容发生变化时,调用该函数。onChangeText接收一个文本的参数对象。
  • onChange: 当文本变化时,调用该函数。
  • onEndEditing: 当结束编辑时,调用该函数。
  • onBlur: 失去焦点触发事件,回调该函数。
  • onFocus: 获得焦点触发该监听事件。
  • onSubmitEditing: 当结束编辑后,点击键盘的提交按钮出发该事件。但是当multiline={true}的时候,该属性就会失效。
  • secureTextEntry:设置是否为密码安全输入框 ,默认为false。
  • textAlign:设置文本横向布局方式 可选参数('start', 'center', 'end')
  • textAlignVertical:设置文本垂直方向布局方式 可选参数('top', 'center', 'bottom')
  • underlineColorAndroid:设置文本输入框下划线的颜色
  • autoCorrect:设置拼写自动修正功能 默认为开启(true)
  • onLayout:当组件布局发生变化的时候调用
  • numberOfLines:number设置文本输入框行数,使用该功能需要先设置multiline为true,设置TextInput为多行文本。

TextInput实践

效果图

废话不多说,结合我们之前学的一些基础,再加上TextInput的知识,我们现在练习一个demo,巩固一下以前的知识点。效果图如下:

demo代码

import React, { Component } from 'react';
import {
  AppRegistry,
  StyleSheet,
  Text,
  View,
  TextInput
} from 'react-native';

class TextInputDemo extends Component {
  render() {
    return (
      <View style={styles.container}>
        <View style={styles.top_half_view}>
          <View style={styles.title_view}>
             <Text style={styles.title_text}>
               邮箱登录
            </Text>
          </View>

          <TextInput 
              style={styles.textinput}
              placeholder='邮箱'
              numberOfLines={1}
              autoFocus={true}
              underlineColorAndroid={'#e1e1e1'}
          />
           <TextInput 
              style={styles.textinput}
              placeholder='密码'
              numberOfLines={1}
              secureTextEntry={true}
              underlineColorAndroid={'#e1e1e1'}
          />
          <View style={{backgroundColor:'#ffffff',flexDirection:'row',alignItems:'center',justifyContent:'center'}}>
             <View style={styles.style_view_register}>
              <Text style={{color:'#5ac4ef'}}>
                注册
              </Text>
             </View>

             <View style={styles.style_view_login}>
              <Text style={{color:'white'}}>
                登录
              </Text>
             </View>
          </View>
          <Text style={styles.bottom_text}>
            忘了密码?点此找回
          </Text>
        </View>
        <View style={styles.bottom_half_view}>
        </View>
      </View>
    );
  }
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: 'white',
  },
  title_view:{
    flexDirection:'row',
    height:50,
    alignItems: 'center',
    backgroundColor:'#27b5ee',
  },
  title_text:{
    color:'white',
    fontSize:22,
    marginLeft:20,
    textAlign:'center'
  },
  top_half_view:{
    flex: 1.3,
    backgroundColor: 'white',
  },
  bottom_half_view:{
    flex: 1,
    backgroundColor: '#eeeeee',
  },
  textinput: {
    backgroundColor:'#fff',
    marginTop:5,
    marginLeft:20,
    marginRight:20,
    textAlign:'left',
  },
  style_view_login:{  
      flex:1,
      marginTop:20,
      marginLeft:20,
      marginRight:20,
      backgroundColor:'#27b5ee',
      height:35,
      borderRadius:5,
      justifyContent: 'center',
      alignItems: 'center',
  },
  style_view_register:{  
      flex:1,
      marginTop:20,
      marginLeft:20,
      marginRight:20,
      borderColor:'#5ac4ef',
      borderWidth: 1,
      height:35,
      borderRadius:5,
      justifyContent: 'center',
      alignItems: 'center',
  },
  bottom_text:{
    color:'#27b5ee',
    fontSize:14,
    marginTop:10,
    marginLeft:20,
    textAlign:'left',
    fontWeight:'bold'
  },
});

AppRegistry.registerComponent('TextInputDemo', () => TextInputDemo);

本文分享自微信公众号 - 非著名程序员(non-famous-coder)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-10-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏向治洪

actionbar完全解析(一)

Action Bar是一种新増的导航栏功能,在Android 3.0之后加入到系统的API当中,它标识了用户当前操作界面的位置,并提供了额外的用户动作、界面导航...

230100
来自专栏向治洪

activity的启动模式和栈管理

 在学习Android的过程中,Intent是我们最常用Android用于进程内或进程间通信的机制,其底层的通信是以Binder机制实现的,在物理层则是通过共享...

23890
来自专栏向治洪

nfc开发

    很多Android设备已经支持NFC(近距离无线通讯技术)了。本文就以实例的方式,为大家介绍如何在Android系统中进行NFC开发。 Andro...

55450
来自专栏向治洪

actionbar详解(二)

经过前面两篇文章的学习,我想大家对ActionBar都已经有一个相对较为深刻的理解了。唯一欠缺的是,前面我们都只是学习了理论知识而已,虽然知识点已经掌握了,但是...

21480
来自专栏向治洪

android的消息通知栏

在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,...

1.1K70
来自专栏向治洪

android galley实现画廊效果

今天在做一个软件界面时用到了ImageSwitcher和Gallery控件,在看API时,感觉上面的例子讲的不是很具体,效率并不高。在这里我就以一个图片浏览功能...

21690
来自专栏向治洪

qq侧滑

上一篇博客带大家实现了:Android 自定义控件打造史上最简单的侧滑菜单 ,有兄弟看了以后说,你这滑动菜单过时了呀~QQ5.0的效果还不错~~嗯,的确,上一...

48360
来自专栏向治洪

TraceView性能分析工具介绍

一、TraceView简介       TraceView是AndroidSDK里面自带的工具,用于对Android的应用程序以及Framework层的代码进行...

31950
来自专栏向治洪

百度map 3.0初探

1.简介     在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联。因此,您必须先有百度帐户,才...

20250
来自专栏数据派THU

教你用一行Python代码实现并行(附代码)

来源:编程派 翻译:caspar 译文:https://segmentfault.com/a/1190000000414339 原文:https://mediu...

385100

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励