我正在更改keyListener上的EditText的值。

但是当我更改文本时,光标移动到EditText的开头。 我需要光标在文本的末尾。

如何将光标移动到EditText文本的末尾。


当前回答

editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        editText.setSelection(editText.getText().length());
        return false;
    }
});

其他回答

如果你之前调用setText并且新的文本没有得到布局阶段调用setSelection在一个单独的runnable中由View.post(runnable)触发(从本主题重新发布)。

所以,对我来说,这段代码是有效的:

editText.setText("text");
editText.post(new Runnable() {
         @Override
         public void run() {
             editText.setSelection(editText.getText().length());
         }
});

编辑05/16/2019:现在我正在使用Kotlin扩展:

fun EditText.placeCursorToEnd() {
    this.setSelection(this.text.length)
}

然后- editText.placeCursorToEnd()。

我认为这可以达到你想要的效果。

 Editable etext = mSubjectTextEditor.getText();
 Selection.setSelection(etext, etext.length());

在我的情况下,我创建了以下Kotlin ext.函数,可能对某人有用:

private fun EditText.focus(){
    requestFocus()
    setSelection(length())
}

然后按如下方式使用:

mEditText.focus()

editText。这里的setSelection很神奇。基本上选择让你把光标放在任何你想要的位置。

EditText editText = findViewById(R.id.editText);
editText.setSelection(editText.getText().length());

这将光标放置到EditText的末尾。基本上,editText.getText().length()会给出文本长度。然后使用setSelection with length。

editText.setSelection(0);

它用于将光标设置在起始位置(0)。

这个问题已经很老了,但我认为如果你想使用Android上最新发布的DataBinding工具,有这个答案可能会很有用,只需在XML中设置这个:

<data>
    <variable name="stringValue" type="String"/>
</data>
...
<EditText
        ...
        android:text="@={stringValue}"
        android:selection="@{stringValue.length()}"
        ...
/>