我用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被打印了两次,简直没道理啊
貌似是 Android EditText 的一些问题,下个版本我会修复之。
好的,感谢大大