cocos2dx-3.12 android/ios监听键盘高度

来源:互联网 发布:为什么淘宝追评不显示 编辑:程序博客网 时间:2024/06/05 09:48

目前cocos2dx-3.12版本,键盘弹起时,整个界面往上移动一部分。如图:

       

但是有时候我们不想要这种效果,比如聊天界面,键盘弹起时只希望部分界面上移,其他不用移动。如图:


这时我们需要监听键盘的高度,所以需要重写cocos2dx::ui::EditBox的如下方法:

virtual void keyboardWillShow(IMEKeyboardNotificationInfo& info)override;

virtual void keyboardWillHide(IMEKeyboardNotificationInfo& info)override;

EditBoxView.h代码

#ifndef __EditBoxView__h__#define __EditBoxView__h__#include "cocos2d.h"#include "ui/CocosGUI.h"class EditBoxView : public cocos2d::ui::EditBox{public:    typedef std::function<void(float height)> ccKeyboardHeightChangedCallback;        // Here's a difference. Method 'init' in cocos2d-x returns bool    virtual bool init(const cocos2d::Size &size);        // implement the "static create()" method manually    static EditBoxView* create(const cocos2d::Size &size);        /**     *  添加键盘变化事件     *     *  @param callback 回调事件     */    void addKeyboardHeightChangedListener(const ccKeyboardHeightChangedCallback &callback) {        _keyboardHeightChangedCallback = callback;    };        #pragma mark - 重写键盘显示或隐藏方法    // 键盘将要显示回调    virtual void keyboardWillShow(cocos2d::IMEKeyboardNotificationInfo& info) override;        // 键盘将要隐藏回调    virtual void keyboardWillHide(cocos2d::IMEKeyboardNotificationInfo& info) override;    protected:    // 键盘变化事件    ccKeyboardHeightChangedCallback _keyboardHeightChangedCallback = nullptr;};#endif
EditBoxView.cpp代码

#include "EditBoxView.h"USING_NS_CC;using namespace ui;EditBoxView* EditBoxView::create(const cocos2d::Size &size){    EditBoxView* pRet = new (std::nothrow) EditBoxView();    if (pRet && pRet->init(size)) {        pRet->autorelease();        return pRet;    } else {        delete pRet;        pRet = nullptr;        return nullptr;    }}bool EditBoxView::init(const cocos2d::Size &size){    if (!EditBox::initWithSizeAndBackgroundSprite(size, Scale9Sprite::create())) {        return false;    }        return true;}void EditBoxView::keyboardWillShow(IMEKeyboardNotificationInfo& info){    if (_keyboardHeightChangedCallback) {        _keyboardHeightChangedCallback(info.end.size.height);    }}void EditBoxView::keyboardWillHide(IMEKeyboardNotificationInfo& info){    if (_keyboardHeightChangedCallback) {        _keyboardHeightChangedCallback(0);    }}
在自己用到的地方添加代码:

// 屏幕大小auto size = Director::getInstance()->getVisibleSize();    // 输入框背景auto editBoxBg = Scale9Sprite::create("input_bg.png");editBoxBg->setPreferredSize(Size(size.width, 60));editBoxBg->setAnchorPoint(Vec2::ANCHOR_MIDDLE_BOTTOM);editBoxBg->setPosition(size.width * 0.5, 0);this->addChild(editBoxBg);    // 输入框auto editBoxView = EditBoxView::create(editBoxBg->getContentSize());editBoxView->setPosition(editBoxView->getContentSize() * 0.5);editBoxView->addKeyboardHeightChangedListener([=](float height){    editBoxBg->setPositionY(height);});editBoxBg->addChild(editBoxView);

ios平台上顺利运行!!!

但是,android平台上运行却不是我们想要的结果,还是键盘弹起时,整个界面往上移动。

cocos2dx-3.12 解决android不能监听键盘高度事件


0 0
原创粉丝点击