React Native - Keyboard API使用详解(监听处理键盘事件)

当我们点击输入框时,手机的软键盘会自动弹出,以便用户进行输入。但有时我们想在键盘弹出时对页面布局做个调整,或者在程序中使用代码收起这个软键盘,这些借助  React Native 框架提供的 Keyboard API 就可以实现。

一、Keyboard API 提供的方法

Keyboard API 提供如下的静态函数供开发者使用。

1,addListener(eventName, callback)

(1)这个函数用来加载一个指定事件的事件监听器,函数中的  eventName 可以是如下值:
  • keyboardWillShow:软键盘将要显示
  • keyboardDidShow:软键盘显示完毕
  • keyboardWillHide:软键盘将要收起
  • keyboardDidHide:软键盘收起完毕
  • keyboardWillChangeFrame:软件盘的 frame 将要改变
  • keyboardDidChangeFrame:软件盘的 frame 改变完毕

(2)这个函数返回一个对象。我们可以保存这个对象,在需要释放事件监听器时,调用这个对象的  remove 方法。

2,removeListener(eventName, callback)

这个函数用来释放一个特定的键盘事件监听器。

3,removeAllListener(eventName)

这个函数用来释放一个指定键盘事件的所有事件监听器。

4,dissmiss()

这个方法让操作系统收起软键盘。

二、event 参数值

所有的键盘事件处理函数都能收到一个  event 参数,不过在不同平台下  event 参数可以取到的值不太一样。

1,Android 平台可以取到的值

  • event.endCoordinates.screenX
  • event.endCoordinates.screenY
  • event.endCoordinates.width
  • event.endCoordinates.height

2,iOS 平台可以取到的值

  • event.easing:这个值始终是 keyboard
  • evnet.duration:记录软键盘弹出动画的持续事件,单位是毫秒
  • event.startCoordinates.screenX
  • event.startCoordinates.screenY
  • event.startCoordinates.width
  • event.startCoordinates.height
  • event.endCoordinates.screenX
  • event.endCoordinates.screenY
  • event.endCoordinates.width
  • event.endCoordinates.height

三、使用样例

1,效果图

(1)在组件加载时就开始监听虚拟键盘的弹出/隐藏事件,一旦虚拟键盘状态发生变化,输入框下方便会实时显示当前状态。
(2)虚拟键盘打开后,除了点击键盘上的“ 完成”按钮外可以收起键盘外。点击输入框右侧的“ 收起键盘”按钮也可以达到同样效果。
      原文:React Native - Keyboard API使用详解(监听处理键盘事件)         原文:React Native - Keyboard API使用详解(监听处理键盘事件)

2,样例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import React, { Component } from  'react' ;
import {
  AppRegistry,
  StyleSheet,
  TextInput,
  View,
  Text,
  Keyboard
} from  'react-native' ;
 
class Main extends Component {
 
   constructor(props){
     super (props);
     this .keyboardDidShowListener =  null ;
     this .keyboardDidHideListener =  null ;
     this .state = { KeyboardShown:  false };
   }
 
   componentWillMount() {
     //监听键盘弹出事件
     this .keyboardDidShowListener = Keyboard.addListener( 'keyboardDidShow' ,
       this .keyboardDidShowHandler.bind( this ));
     //监听键盘隐藏事件
     this .keyboardDidHideListener = Keyboard.addListener( 'keyboardDidHide' ,
       this .keyboardDidHideHandler.bind( this ));
   }
 
   componentWillUnmount() {
     //卸载键盘弹出事件监听
     if ( this .keyboardDidShowListener !=  null ) {
       this .keyboardDidShowListener.remove();
     }
     //卸载键盘隐藏事件监听
     if ( this .keyboardDidHideListener !=  null ) {
       this .keyboardDidHideListener.remove();
     }
   }
 
   //键盘弹出事件响应
   keyboardDidShowHandler(event) {
     this .setState({KeyboardShown:  true });
     console.log(event.endCoordinates.height);
   }
 
   //键盘隐藏事件响应
   keyboardDidHideHandler(event) {
     this .setState({KeyboardShown:  false });
   }
 
   //强制隐藏键盘
   dissmissKeyboard() {
     Keyboard.dismiss();
     console.log( "输入框当前焦点状态:"  this .refs.bottomInput.isFocused());
   }
 
   render() {
    return  (
     <View style={[styles.container]}>
       <View style={[styles.flexDirection, styles.inputHeight]}>
         <TextInput style={styles.textInputStyle} ref= "bottomInput"  />
         <Text style={styles.buttonStyle}
           onPress={ this .dissmissKeyboard.bind( this )}>
           收起键盘
         </Text>
       </View>
       <Text>
         当前键盘状态:{ this .state.KeyboardShown ?  "打开"  "关闭" }
       </Text>
     </View>
    );
   }
}
 
const styles = StyleSheet.create({
   container:{
      flex:1,
      paddingTop:15
   },
   flexDirection:{
    flexDirection: 'row'
   },
   inputHeight:{
    height:35,
    alignItems:  'center'
   },
   textInputStyle:{
     flex:1,
     height:35,
     fontSize:18,
   },
   buttonStyle:{
     fontSize:20,
     color: 'white' ,
     width:100,
     textAlign: 'center' ,
     backgroundColor: '#4CA300'
   },
});
 
AppRegistry.registerComponent( 'HelloWorld' , () => Main);

原文出自: www.hangge.com   转载请保留原文链接: http://www.hangge.com/blog/cache/detail_1761.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值