将光标放在 EditText 中的文本末尾

我正在keyListener上更改EditText的值。

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

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

答案

尝试这个:

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

ediitext 有一个名为 append 的函数,该函数将字符串值附加到当前的 edittext 值,并将光标置于该值的末尾。您可以将字符串值作为当前 ediitext 值本身,然后调用 append();。

myedittext.append("current_this_edittext_string");

科特林

将光标设置到起始位置

val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(0)

将光标设置在 EditText末尾

val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(editText.text.length)

下面的代码是将光标放在第二个字符之后:

val editText = findViewById(R.id.edittext_id) as EditText
editText.setSelection(2)

JAVA

将光标设置到起始位置

EditText editText = (EditText)findViewById(R.id.edittext_id);
 editText.setSelection(0);

将光标设置在 EditText末尾

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

下面的代码是将光标放在第二个字符之后:

EditText editText = (EditText)findViewById(R.id.edittext_id);
editText.setSelection(2);

如果您之前调用过setText ,但是新文本未获得布局阶段,请在由View.post(Runnable)激发的单独可运行对象中调用setSelection (从主题重新发布)。

因此,对我来说,这段代码有效:

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()。

您也可以将光标放在EditText视图中文本的末尾,如下所示:

EditText et = (EditText)findViewById(R.id.textview);
int textLength = et.getText().length();
et.setSelection(textLength, textLength);
editText.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        editText.setSelection(editText.getText().length());
        return false;
    }
});

这是另一种可能的解决方案:

et.append("");

如果由于某种原因它不起作用,请尝试以下解决方案:

et.setSelection(et.getText().length());

您应该可以使用 EditText 的 setSelection()方法实现此目标,请参见此处

就我而言,我创建了以下 kotlin 分机。功能,可能对某人有用

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

然后使用如下

mEditText.focus()
/**
 * Set cursor to end of text in edittext when user clicks Next on Keyboard.
 */
View.OnFocusChangeListener onFocusChangeListener = new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean b) {
        if (b) {
            ((EditText) view).setSelection(((EditText) view).getText().length());
        }
    }
};

mEditFirstName.setOnFocusChangeListener(onFocusChangeListener); 
mEditLastName.setOnFocusChangeListener(onFocusChangeListener);

它对我有用!