我在keyListener
上更改了一个EditText
的值。
但是当我更改文本时,光标会移动到EditText
的开头。
我需要光标在文本末尾。
如何将光标移动到EditText
的末尾。
我在keyListener
上更改了一个EditText
的值。
但是当我更改文本时,光标会移动到EditText
的开头。
我需要光标在文本末尾。
如何将光标移动到EditText
的末尾。
试试这个:
更新:
Kotlin:
editText.setSelection(editText.length())//placing cursor at the end of the text
Java:
editText.setSelection(editText.getText().length());
EditText
类的onSelectionChanged()
方法来处理它:public void onSelectionChanged(int start, int end) {
CharSequence text = getText();
if (text != null) {
if (start != text.length() || end != text.length()) {
setSelection(text.length(), text.length());
return;
}
}
super.onSelectionChanged(start, end);
}
- Etienne Lawlor有一个名为append的函数,用于在编辑框中将字符串值附加到当前值并将光标放置在该值的末尾。您可以将当前编辑框值作为字符串值本身,然后调用append()函数。
myedittext.append("current_this_edittext_string");
myedittext.append("");
即可。 - ymerdrengenemyedittext.append("");
并不能让我成功! - Chintan ShahKotlin:
将光标设置为起始位置:
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);
findViewById<EditText>(R.id.edittext_id)
替代findViewById(R.id.edittext_id) as EditText
,或者直接避免转换(如果使用API 26+)。 - Evin1_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;
}
});
在我的情况下,我创建了以下Kotlin扩展函数,可能对某些人有用:
private fun EditText.focus(){
requestFocus()
setSelection(length())
}
然后按如下方式使用:
mEditText.focus()
这是另一种可能的解决方案:
et.append("");
如果由于任何原因这个解决方案不能工作,只需尝试这个:
et.setSelection(et.getText().length());
如果您的EditText不清晰:
editText.setText("");
editText.append("New text");
editText.setText(null);
editText.append("New text");
ListView
中作为项目的EditText
的问题。至于实验,我对ListView
源代码进行了一些更改,这是一个相当复杂的东西,并在模拟器上进行了测试。它与组件所做的焦点控制管理有关。所以当然,这不是我可以给我们的朋友帮助的解决方案。 :) - kanedaOnFocusChanged
回调中不起作用。解决方法是将setSelection
放入一个可运行的对象中,并在主线程上运行它。请参考此处 https://dev59.com/e4rda4cB1Zd3GeqPHxcg#32156989 - Ali Nem