android上e.endCoordinates.height的问题



  • android上只有keyboardDidShow事件,所以我在keyboardDidShow事件中获取到键盘高度:e.endCoordinates.height,然后将此高度赋值给组件的bottom,当键盘弹出时,组件的位置正好在键盘之上,一切正常,但是。。。把app切换到后台,再打开app,再次弹出键盘,组件的位置就错乱了,此时组件的bottom设为0,才是正好在键盘之上。这个bug不知如何解决,求教。
    如图:

    代码如下:

        componentWillMount: function() {
            this.addListenerOn(RCTDeviceEventEmitter, 'keyboardDidShow', this.keyboardDidShow);
            this.addListenerOn(RCTDeviceEventEmitter, 'keyboardDidHide', this.keyboardDidHide);
        },
        keyboardDidShow: function(e: Event) {
            this.refs.funcView.reset();
            this.setState({funcContainerHeight: e.endCoordinates.height});
        },
    

    组件代码:

    <FuncView ref={"funcView"} bottom={this.state.funcContainerHeight} navigator={this.props.navigator} onEmojiPress={this.onEmojiPress} onDeleteEmoji={this.onDeleteEmoji} />
    


  • 结合父组件onLayout事件,算是搞定了。。。



  • 这是不是某个定制的特殊键盘?我这里实践的时候,正常Android的键盘和iOS的原理是不同的:

    iOS的键盘弹出时,会覆盖在原来的界面上,原来的界面尺寸不变。

    而Android的键盘弹出时,会改变整个原来界面的大小。

    也就是说我觉得按你的做法,在安卓上第二个表现才是正常的。至于一开始为啥正确了,反而可能是因为某些问题导致的。


登录后回复