Android中调用TextInput的focus函数无法唤起软键盘



  • 环境:RN 0.30, Android
    场景:点击按钮,让焦点聚到制定TextInput中,并唤起软键盘
    问题:iOS正常,Android中TextInput可以得到焦点但软键盘不显示

    已搜索RN的issue列表和stackoverflow,无果,在这里请大家帮帮忙。



  • @chardlau 自己已解决

    问题重点不在TextInput的focus函数,而是在focus的时候页面需要做其他动画效果导致键盘无法在一定时间内作出响应(据运行效果猜测:Android如果无法在一定时间内打开软键盘就不显示;iOS键盘弹出可能是在非js线程执行,亦或是键盘弹出事件可以延迟执行)。使用IneractionManager延迟focus函数的调用可以解决问题。

    onPress={() => {
             // ... other animation 
            // this.refs.input.focus(); // old: here is where the problem happen
            const handle = ReactNative.findNodeHandle(comment.view);
            InteractionManager.runAfterInteractions(() => {
                this.refs.input.focus(); // new: here is ok
    
                UIManager.measureLayoutRelativeToParent(
                    handle,
                    (e) => {console.error(e)},
                    (x, y, w, h) => {
                        this._doScrollListViewTo(y);
                    });
            });
    }}

登录后回复