用输入框遇到的两个问题,不知道有没有大佬能够提供指导或解决方案,小弟拜谢啦!
1.魅族手机用EditBox无法输入中文,打的字全是字母现实;
2.web与手机上输入框的光标都有问题,就是一句话,手动把光标移到中间,想要进行删除或插入文字操作,但是删除一个字符(或新打一个字)后光标又跑到最后了!
以上,有遇到的大大提点提点~(•́₃•̀)
用输入框遇到的两个问题,不知道有没有大佬能够提供指导或解决方案,小弟拜谢啦!
1.魅族手机用EditBox无法输入中文,打的字全是字母现实;
2.web与手机上输入框的光标都有问题,就是一句话,手动把光标移到中间,想要进行删除或插入文字操作,但是删除一个字符(或新打一个字)后光标又跑到最后了!
以上,有遇到的大大提点提点~(•́₃•̀)
我也发现了… 用其他手机输入中文没问题
好忧伤,这些BUG单只能一直挂着-,-
最近清理游戏BUG单,又把第二个输入框光标问题找了出来。去看了下安卓输入框部分的源码,发现每次输入框文本变化时引擎就将光标设置到最后,抱着尝试修改光标行为的想法做了些修改,发现还真能修复
贴上自己的修改供大家参考,总共修改两个JAVA代码:
Cocos2dxEditBox.java:
//添加两个私有变量
private int mCurTextLen = 0;
private int mForceCursorPos = 0;
public void setText(String text) {
String newText = updateDomTextCases(text);
super.setText(newText);
this.mCurTextLen = newText.length(); //!@
//this.setSelection(newText.length()); //注释原来的方法
}
//!@ 新添加方法
public void forceCursorPos(int forcePos) {
this.mForceCursorPos = forcePos;
}
//!@ 新添加方法
public void updateCursorPos() {
int newPos = this.mForceCursorPos < 0 ? 0 : this.mForceCursorPos > this.mCurTextLen ? this.mCurTextLen : this.mForceCursorPos;
this.setSelection(newPos);
this.mForceCursorPos = 0;
}
Cocos2dxEditBoxHelper.java:
//修改 beforeTextChanged 方法内容,大概在Line 123
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
int selectionStart = editBox.getSelectionStart();
int selectionEnd = editBox.getSelectionEnd();
if (selectionStart != selectionEnd || (count > 0 && after > 0)) { //选择操作(通过长按输入框使用前后光标选择一段文本进行操作: 删除或者整段替换)
editBox.forceCursorPos(start + after);
} else { //正常操作
editBox.forceCursorPos(selectionStart - count + after);
}
}
//这个函数只修改添加 updateCursorPos()方法
public void afterTextChanged(final Editable s) {
if (!editBox.getChangedTextProgrammatically()) {
// fix fireball/issues/7726
// Remove the current listener first to avoid endless loops.
editBox.removeTextChangedListener(this);
editBox.setText(editBox.getText().toString());
editBox.updateCursorPos(); //!@ 在这里更新光标位置
// Resume listening.
editBox.addTextChangedListener(this);
if((Boolean)editBox.getTag()) {
mCocos2dxActivity.runOnGLThread(new Runnable() {
@Override
public void run() {
Cocos2dxEditBoxHelper.__editBoxEditingChanged(index, s.toString());
}
});
}
}
editBox.setChangedTextProgrammatically(false);
}
已测试两个安卓机与一个模拟器,欢迎大家指正
EditBox多行时你这样修改光标位置还是有问题
额,具体是什么问题呢;
现在项目里有用到一个多行的EditBox,是可以插入输入的-,-