EditBox的在原生平台上和在模拟器里行为不一致

我用EditBox加一个Label来做带字体的编辑框,除了输入的时候不能看到字体,其它勉强可以接受。
输入开始的时候,需要隐藏Label,我直接在EditBox的change回调函数里,把Label的Opacity改成了0,模拟器里的结果是好的。安卓平台上,开始Label总会看不见,找了很久的bug,才发现是EditBox每次在app开始的时候,都会固定执行两次change回调函数。这是什么情况?为什么官方要这么设置?@zilong

后来我把隐藏Label的代码改到begin回调函数就可以了。

初始的时候如果 editbox 的内容没有修改应该是不会调用 change 回调的,如果调用了,那就是 bug。
你先检查一下,你的 editbox 在初始化的时候是否有修改内容?

我在编辑器里把Placeholder删除了,EditBox仅被用作另一个脚本的属性,这个脚本除了提供EditBox的3个回调函数以外没有在回调函数以外的地方引用EditBox,别的地方也都没有引用过EditBox,EditBox也没有加别的组件。
代码如下

desEdit:{//这是声明属性的设置
default:null,
type:cc.EditBox
}
descriptionDidBegin:function(){
this.releaseControl(this.desEdit);

    this.des.node.removeAllChildren();
    
    
    this.desEdit.string = this.des.getComponent("resizeBoldLabel").description  ;//这个是自己写的支持加粗的富文本
    this.desEdit.fontSize = this.des.fontSize;
    
    this.modified = false;
    this.message.string += "Description text begin\n";//因为原声平台不能在程序开始时调试,用了一个label做输出,但是begin并没有被打印出来
    cc.log("Description text begin");
},
descriptionDidChange:function(text){
    this.message.string += "Description text Change\n";//会打印出两行change
    this.des.node.opacity = 0;//这行代码会在程序开始时执行,导致label消失
    this.modified = true;
}
,
descriptionDidEnd:function(){
    cc.log("Description text end, text:",this.desEdit.string);
    this.message.string += "Description text end\n";
    this.des.node.opacity = 255;
    if(this.modified)
        this.des.getComponent("resizeBoldLabel").description = this.desEdit.string;
}

其它地方的设置如下

可能是 editbox 在启动的时候设置了初始的 string,导致了 change 事件被调用。我看看为何会调用两次。。。

诡异的地方就在于,begin和end都没有被打印出来,只有change被打印了两次,简直没道理啊

http://stackoverflow.com/questions/21713246/addtextchangedlistener-and-ontextchanged-are-always-called-when-android-fragment

貌似是 Android EditText 的一些问题,下个版本我会修复之。

好的,感谢大大