editBox android

在Cocos2dxEditBoxHelper.java中看到一段代码:

public static void setText(final int index, final String text){
    mCocos2dxActivity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Cocos2dxEditBox editBox = mEditBoxArray.get(index);
            if (editBox != null) {
                editBox.setChangedTextProgrammatically(true);
                editBox.setText(text);
                int position = editBox.getText().length();
                editBox.setSelection(position);
            }
        }
    });
}

为什么在设置文本时,要设置一次光标位置?那么修改中间的文本的时候,光标会自动跳到最后去了

creator 193

我自己改了源码,方案如下:
注释掉Cocos2dxEditBoxHelper.java中的setSelection代码:

public static void setText(final int index, final String text){
    mCocos2dxActivity.runOnUiThread(new Runnable() {
        @Override
        public void run() {
            Cocos2dxEditBox editBox = mEditBoxArray.get(index);
            if (editBox != null) {
                editBox.setChangedTextProgrammatically(true);
                editBox.setText(text);
                // int position = editBox.getText().length();
                // editBox.setSelection(position);
            }
        }
    });
}

修改Cocos2dxEditBox.java中的setText方法:

public void setText(String text) {
    int last = this.getSelectionEnd();
    int length = this.getText().length();

    String newText = updateDomTextCases(text);
    super.setText(newText);
    int position = newText.length();
    this.setSelection(last == length ? position : last + (position - length));
}
1赞

进来哦看看

感谢提供方案, 这个修改有一个隐患, 就是编辑过输入的文字后再清空( editbox.string = "" )会导致闪退. 因为: last + (position - length) 算出来会是负值.

我的解决方案是加最大和最小值限制:

this.setSelection(last == length ? position : Math.min(Math.max(0, last + (position - length)), position));
1赞