返回 导航

React / React Native

hangge.com

React Native - 实现高度自增长的 TextInput 组件

作者:hangge | 2017-09-13 08:10
在移动应用开发中,有时希望输入区的高度可以随着输入内容的行数增加而增长。本文演示如何实现这种自增长的 TextInput 组件。

1,效果图

(1)默认情况下 TextInput 组件只显示一行的高度。
(2)当用户输入的内容超过 TextInput 组件的高度时,TextInput 组件将会自动变高,把用户的所有输入都显示出来。
          

2,样例代码

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

//自定义的高度动态调整组件
class AutoExpandingTextInput extends Component {
  constructor(props) {
    super(props);
    this.state = {height:0};
  }

  _onContentSizeChange(event) {
    this.setState({
      height: event.nativeEvent.contentSize.height,
    });
  }

  render() {
    return (
      <TextInput {...this.props} //将自定义组件的所有属性交给TextInput
        multiline={true}
        onContentSizeChange={this._onContentSizeChange.bind(this)}
        style={[styles.textInputStyle, {height: Math.max(35, this.state.height)}]}
        value={this.state.text} />
    );
  }
}

export default class Main extends Component {
  _onChangeText = (newText) => {
    console.log('inputed text:' + newText);
  }

  render() {
   return (
    <View style={[styles.container]}>
      <AutoExpandingTextInput style={styles.textInputStyle}
        onChangeText={this._onChangeText.bind(this)} />
    </View>
   );
  }
}

const styles = StyleSheet.create({
  container:{
     flex:1,
     justifyContent:'center',
     alignItems:'center',
  },
  textInputStyle:{
    width:300,
    height:30,
    fontSize:20,
    backgroundColor:'#DDFAFF',
    paddingTop:0,
    paddingBottom:0
  },
});

AppRegistry.registerComponent('HelloWorld', () => Main);
评论

全部评论(0)

回到顶部