creator的Editbox挡住问题
Editbox是creator的老问题,各个版本都有各种各样的bug,处理creator的Editbox顶的太高问题,挡住都看不到内容了,新的creator2.2.1-2.4.3都有顶太高的问题,不能选择黏贴问题。
解决方案如下:
1)js代码添加:
if (cc.sys.os == cc.sys.OS_ANDROID && cc.sys.isNative) {
cc.EditBox.prototype._onTouchBegan = function (event) {
let touch = event.touch
let node = event.target
let upLoadY = touch.getLocationY()
let nodePos = node.convertToNodeSpaceAR(touch.getLocation())
upLoadY -= nodePos.y + node.height / 2
console.log('up Y', upLoadY)
jsb.reflection.callStaticMethod("org/cocos2dx/javascript/AppActivity", "upLoadEditBoxY", "(Ljava/lang/String;)V", upLoadY * cc.view.getScaleY())
}
}
2)java更改1,代码更改,找到文件C:/CocosCreator2.2.1/resources/cocos2d-x/cocos/platform/android/java/src/org/cocos2dx/lib/Cocos2dxActivity.java文件修改349行,改为这个
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING)
继续添加添加
public static float mEditBoxY = 0;
继续修改init函数,添加一行mEditBox = new Cocos2dxEditBox(this, mFrameLayout);隐藏自带的输入框,下面还有一行不用管。
mEditBox = new Cocos2dxEditBox(this, mFrameLayout);
Cocos2dxRenderer renderer = this.addSurfaceView();
3)java更改2,AppActivity.java添加函数
// 接收Y坐标
public static void upLoadEditBoxY(String y){
mEditBoxY=Float.parseFloat(y);
}
4)java更改3,Cocos2dxEditBox.java文件,修改registKeyboardVisible方法
private void registKeyboardVisible() {
getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
Rect r = new Rect();
getWindowVisibleDisplayFrame(r);
int heightDiff = getRootView().getHeight() -(r.bottom-r.top);
// if more than a quarter of the screen, its probably a keyboard
if (heightDiff > mScreenHeight/4) {
if (!keyboardVisible) {
keyboardVisible = true;
if(heightDiff>Cocos2dxActivity.mEditBoxY){
GLSurfaceView gl=mActivity.getGLSurfaceView();
Log.i(TAG, "Cocos2dxActivity.mEditBoxY: "+Cocos2dxActivity.mEditBoxY);
float moveY=-(heightDiff-Cocos2dxActivity.mEditBoxY);
gl.setY(moveY);
}
}
} else {
if (keyboardVisible) {
keyboardVisible = false;
Cocos2dxEditBox.this.hide();
GLSurfaceView gl=mActivity.getGLSurfaceView();
gl.setY(0);
}
}
}
});
}
5)继续修改Additems方法,注释这行layoutParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
6)搞定!试试看吧。