因为一些特殊需求需要限制原生的输入框的文本,所以去对引擎的一些文件进行修改; 当前只是对输入框进行赋值刷新,可以根据类似的写法增加其他逻辑;
修改引擎文件
- resources\cocos2d-x\cocos\platform\android\java\src\org\cocos2dx\lib\Cocos2dxEditBox.java
添加静态方法updateText,调用setTextKeepState,保持光标位置不变
public class Cocos2dxEditBox {
...
private static void updateText(String text){
if (null != Cocos2dxEditBox.sThis) {
Cocos2dxEditBox.sThis.mActivity.runOnUiThread(new Runnable() {
@Override
public void run() {
Cocos2dxEditBox.sThis.mEditText.setTextKeepState(text);
}
});
}
}
...
}
- resources\cocos2d-x\cocos\scripting\js-bindings\manual\jsb_global.cpp
- 注册方法updateText
bool jsb_register_global_variables(se::Object* global)
{
...
__jsbObj->defineFunction("updateText", _SE(JSB_updateText));
...
}
- 添加JSB_updateText方法实现
...
static bool JSB_updateText(se::State& s)
{
EditBox::updateText(s.args[0].toString());
return true;
}
SE_BIND_FUNC(JSB_updateText);
...
- resources\.editors\Creator\2.4.3\resources\cocos2d-x\cocos\ui\edit-box\EditBox.h
添加updateText声明,防止在jsb_global.cpp中报错
public:
...
static void updateText(std::string text);
...
- resources\.editors\Creator\2.4.3\resources\cocos2d-x\cocos\ui\edit-box\EditBox-android.cpp
实现editbox的updateText方法,该方法调用Cocos2dxEditBox.java中的静态方法updateText
...
void EditBox::updateText(std::string text)
{
JniHelper::callStaticVoidMethod(JCLS_EDITBOX, "updateText", text);
}
...
resources\engine\cocos2d\core\components\editbox\CCEditBox.js 添加方法updateNativeText,以便在项目开发中可以通过editbox组件调用该方法
let EditBox = cc.Class({
...
updateNativeText(text){
if (this._impl) {
this._impl.updateText(text);
}
}
...
})
可以在creator.d.ts中添加方法声明
export class EditBox extends Component {
...
updateNativeText(text:string): void;
...
}
build文件中
- /jsb-link/jsb-adapter/jsb-builtin.js
添加方法updateText,该方法调用在源生端jsb_global.cpp中注册的JSB_updateText方法
jsb.inputBox = {
...
updateText: function updateText(text){
jsb.updateText(text);
}
}
- /jsb-link/jsb-adapter/jsb-engine.js
JsbEditBoxImpl注册方法updateText,该方法调用之前在jsb-builtin中添加在jsb.inputBox中的updateBox
Object.assign(JsbEditBoxImpl.prototype,{
...
updateText(text){
jsb.inputBox.updateText(text);
},
...
})
|