1.  
  2. import React, { Component } from 'react';
  3. import {
  4. AppRegistry,
  5. StyleSheet,
  6. Text,
  7. View,
  8. Keyboard,
  9. TextInput,
  10. Dimensions
  11. } from 'react-native';
  12. var ScreenWidth = (第一大门神) Dimensions.get('window').width;
  13.  
  14. export default class Root extends Component {
  15. // 构造
  16. constructor(props) {
  17. super(props);
  18. // 初始状态
  19. this.state = {
  20. keyboardHeight:0
  21. };
  22. }
  23. render() {
  24. return (
  25. <View style={styles.container}>
  26. <Text style={styles.welcome}>
  27. Welcome to React Native!
  28. </Text>
  29. <Text style={styles.instructions}>
  30. To get started, edit index.android.js
  31. </Text>
  32. <Text style={styles.instructions}>
  33. Double tap R on your keyboard to reload,{'\n'}
  34. Shake or press menu button for dev menu
  35. </Text>
  36. <Text style={styles.instructions}>
  37. To get started, edit index.android.js
  38. </Text>
  39. <Text style={styles.instructions}>
  40. Double tap R on your keyboard to reload,{'\n'}
  41. Shake or press menu button for dev menu
  42. </Text>
  43. <Text style={styles.instructions}>
  44. To get started, edit index.android.js
  45. </Text>
  46. <Text style={styles.instructions}>
  47. Double tap R on your keyboard to reload,{'\n'}
  48. Shake or press menu button for dev menu
  49. </Text>
  50. <Text style={styles.instructions}>
  51. To get started, edit index.android.js
  52. </Text>
  53. <Text style={styles.instructions}>
  54. Double tap R on your keyboard to reload,{'\n'}
  55. Shake or press menu button for dev menu
  56. </Text>
  57. <TextInput
  58. style={{width:ScreenWidth,height:100,borderWidth:2,marginBottom:this.state.keyboardHeight}}
  59. />
  60. </View>
  61. );
  62. }
  63.  
  64. componentWillUnmount() {
  65. this.keyboardDidShowListener.remove();
  66. this.keyboardDidHideListener.remove();
  67. }
  68.  
  69. componentWillMount() {
  70. this.keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', this._keyboardDidShow.bind(this));
  71. this.keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', this._keyboardDidHide.bind(this));
  72. }
  73.  
  74. _keyboardDidShow(e){
  75. this.setState({
  76. keyboardHeight:e. 开始 start Coordin ates.height
  77. })
  78.  
  79. }
  80.  
  81. _keyboardDidHide(e){
  82. this.setState({
  83. keyboardHeight:0
  84. })
  85. }
  86. }
  87.  
  88. const styles = StyleSheet.create({
  89. container: {
  90. flex: 1,
  91. justifyContent: 'center',
  92. alignItems: 'center',
  93. backgroundColor: '#F5FCFF',
  94. },
  95. welcome: {
  96. fontSize: 20,
  97. textAlign: 'center',
  98. margin: 10,
  99. },
  100. instructions: {
  101. textAlign: 'center',
  102. color: '#333333',
  103. marginBottom: 5,
  104. },
  105. });

  

额.后来发现个KeyboardAvoidingView (键盘避免覆盖视图),原来react native已经意识到了.所以上面的代码可以作废.使用新的KeyboardAvoidingView,其中

  1. KeyboardAvoidingView的主要属性behavior 包含三个'height', 'position', 'padding'

大致代码如下:

  1. /**
  2. * Sample React Native App
  3. * https://github.com/facebook/react-native
  4. * @flow
  5. */
  6.  
  7. import React, { Component } from 'react';
  8. import {
  9. AppRegistry,
  10. StyleSheet,
  11. Text,
  12. View,
  13. ScrollView,
  14. TextInput,
  15. KeyboardAvoidingView
  16. } from 'react-native';
  17.  
  18. export default class Root extends Component {
  19. render() {
  20. return (
  21. <KeyboardAvoidingView behavior='position' >
  22. <ScrollView>
  23. <View style={styles.container}>
  24. <Text style={styles.welcome}>
  25. Welcome to React Native!
  26. </Text>
  27. <Text style={styles.instructions}>
  28. To get started, edit index.ios.js
  29. </Text>
  30. <Text style={styles.instructions}>
  31. Press Cmd+R to reload,{'\n'}
  32. Cmd+D or shake for dev menu
  33. </Text>
  34. <Text style={styles.welcome}>
  35. Welcome to React Native!
  36. </Text>
  37. <Text style={styles.instructions}>
  38. To get started, edit index.ios.js
  39. </Text>
  40. <Text style={styles.instructions}>
  41. Press Cmd+R to reload,{'\n'}
  42. Cmd+D or shake for dev menu
  43. </Text>
  44. <Text style={styles.welcome}>
  45. Welcome to React Native!
  46. </Text>
  47. <Text style={styles.instructions}>
  48. To get started, edit index.ios.js
  49. </Text>
  50. <Text style={styles.instructions}>
  51. Press Cmd+R to reload,{'\n'}
  52. Cmd+D or shake for dev menu
  53. </Text>
  54. <Text style={styles.welcome}>
  55. Welcome to React Native!
  56. </Text>
  57. <Text style={styles.instructions}>
  58. To get started, edit index.ios.js
  59. </Text>
  60. <Text style={styles.instructions}>
  61. Press Cmd+R to reload,{'\n'}
  62. Cmd+D or shake for dev menu
  63. </Text>
  64. <Text style={styles.welcome}>
  65. Welcome to React Native!
  66. </Text>
  67. <Text style={styles.instructions}>
  68. To get started, edit index.ios.js
  69. </Text>
  70. <Text style={styles.instructions}>
  71. KeyboardAvoidingView的主要属性behavior PropTypes.oneOf(['height', 'position', 'padding'])
  72. </Text>
  73. <TextInput
  74. placeholder="输入框"
  75. style={{width:300,height:100,borderWidth:1}}
  76. />
  77. </View>
  78. </ScrollView>
  79. </KeyboardAvoidingView>
  80. );
  81. }
  82. }
  83.  
  84. const styles = StyleSheet.create({
  85. container: {
  86. flex: 1,
  87. justifyContent: 'center',
  88. alignItems: 'center',
  89. backgroundColor: '#F5FCFF',
  90. },
  91. welcome: {
  92. fontSize: 20,
  93. textAlign: 'center',
  94. margin: 10,
  95. },
  96. instructions: {
  97. textAlign: 'center',
  98. color: '#333333',
  99. marginBottom: 5,
  100. },
  101. });

  

链接

react native 获取 软键盘高度 和 新增软键盘的组件的更多相关文章

  1. [RN] React Native 获取地理位置

    React Native 获取地理位置 实现原理: 1.用  navigator.geolocation.getCurrentPosition 获取到坐标信息 2.调用 高德地图 接口,解析位置数据 ...

  2. [RN] React Native 获取验证码 按钮

    React Native 获取验证码 按钮 效果如图: 实现方法: 一.获取验证码 按钮组件 封装 CountDownButton.js "use strict"; import ...

  3. React Native 获取组件(Component)在屏幕上的位置

    年后主客户端的需求以及老的业务迁移RN,现在疯狂的在学RN.在迁移需求的时候遇到需要获取组件在屏幕上的绝对位置.页面如下: 就需要展开的时候获取sectionHeader(默认排序)在屏幕上的具体位置 ...

  4. [React Native]获取网络状态

    使用React Native,可以使用NetInfo API获取手机当前的各个网络状态. componentWillMount() { NetInfo.fetch().done((status)=&g ...

  5. React Native 获取网络数据

    getMoviesFromApiAsync() { return fetch('http://facebook.github.io/react-native/movies.json') .then(( ...

  6. react native获取组件高度,宽 度等

    import React,{Component} from 'react'import { View, Text, Image, StyleSheet, TouchableHighlight, Tou ...

  7. react native获取屏幕的宽度和高度

    var Dimensions = require('Dimensions'); var {width,height} = Dimensions.get("window");//第一 ...

  8. React Native获取组件位置和大小

    RN页面中定位或滚动操作时,需要获取元素的大小和位置信息,有几种常用的方法 获取设备屏幕的宽高 import {Dimensions} from 'react-native'; var {height ...

  9. react native 获取地图需要的SHA1

    1.从电脑的根目录进入.android文件 2.进入.android文件后输入 keytool -v -list -keystore debug.keystore 3.回车输入密码,(可以直接回车不用 ...

随机推荐

  1. 设置XShell快捷键 复制粘贴 并禁用智能选择

    设置XShell快捷键 复制粘贴 并禁用智能选择 1打开选项 2键盘和鼠标->打开编辑 3新建 组合键 Ctrl+C 类型:菜单 ->操作 [编辑]复制  [编辑]粘贴 4选中 ctrl+ ...

  2. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

  3. SpringBoot开启缓存注解

    https://blog.csdn.net/sanjay_f/article/details/47372967 https://www.cnblogs.com/lic309/p/4072848.htm ...

  4. EF code first:列名 'Discriminator' 无效

    使用EF code first编写类继承的时候,出现列名 'Discriminator' 无效 . 字段中没有列名 'Discriminator' 原来在代码中,定义了一个类A,类B,B继承A,但是数 ...

  5. devise 自定义手机号登录

    user model中配置 validates_uniqueness_of :phone def email_required? false end 修改user migration文件,给phone ...

  6. ACM-ICPC 2018 焦作赛区网络预赛 Solution

    A. Magic Mirror 水. #include <bits/stdc++.h> using namespace std; int t; ]; inline bool work() ...

  7. 【转载】open-falcon部署

    运维监控系统之Open-Falcon   一.Open-Falcon介绍 1.监控系统,可以从运营级别(基本配置即可),以及应用级别(二次开发,通过端口进行日志上报),对服务器.操作系统.中间件.应用 ...

  8. Mybatis 之 缓存结构

    Mybatis默认提供两种缓存方式,一级缓存是SqlSession 级别的缓存,二级缓存是Mapper 级别的缓存 SqlSession 级别的缓存,每个缓存是相对独立,互不影响:Mapper 级别 ...

  9. python 中读取yaml

    YAML 是专门用来写配置文件的语言,非常简洁和强大,远比 JSON 格式方便. YAML在python语言中有PyYAML安装包. YAML 语言(发音 /ˈjæməl/ )的设计目标,就是方便人类 ...

  10. 抓包工具Charles简单使用介绍

    一是拦截别人软件的发送的请求和后端接口,练习开发. 二是自己后端返回的response拦截修改后再接收以达到测试临界数据的作用. 三写脚本重复拦截抓取别人的数据. 四支持流量控制,可以模拟慢速网络以及 ...