如何在EditText中设置光标位置?

271

页面上有两个 EditText,加载页面时,在第一个 EditText 中设置了文本,这样光标会在 EditText 的起始位置,我想要将光标位置设置到第二个没有数据的 EditText 中。如何实现?


2
你可以将其重力设置为“中心”。它会自动将光标设置在中心。然后,您的文本也将居中显示。 - Hiral Vadodaria
首先,尝试提高您的接受率。其次,在EditText中没有文本时,您所说的设置光标位置是什么意思? - Vladimir
26个回答

539

position 是一个整数:

editText1.setSelection(position)

1
有没有办法在XML文件中做到这一点? - kike
@kike 我不这么认为。 - atasoyh
1
在数据绑定中使用android:selection来操作XML。 - Mubarak Mohideen

104

我已经用以下方法在程序中更新EditText文本后将光标位置设置到文本末尾:

其中,etmsg是EditText。

etmsg.setText("Updated Text From another Activity");
int position = etmsg.length();
Editable etext = etmsg.getText();
Selection.setSelection(etext, position);

5
+1啊!很好,它帮助我在EditText中设置光标位置。 - Dharmendra
2
这对我没有用。我的EditText中有可扩展字符串。有什么解决方法吗? - Etienne Lawlor
1
@toobsco42 你好,我刚刚尝试在编辑框中使用Spannable String。请查看http://pastebin.com/i02ZrNw4,它的工作结果与预期一致。请查看并比较。 - MKJParekh
这个能够从 XML 文件中实现吗?@MKJParekh - Yog Guru
1
似乎做了相同的事情:etmsg.setText("我的新文本..."); etmsg.setSelection(etmsg.length()); - Steve Blackwell

46

如何在Android中设置EditText光标位置

以下代码将将光标设置到起始位置EditText中:

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

以下代码将光标设置到EditText的末尾:Set cursor to end

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

以下代码是将光标设置在第2个字符位置之后:

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

22

我想在不包含数据的EditText中设置光标位置

在空的EditText中只有一个位置,它是setSelection(0)

或者你是想在活动打开时让你的EditText获得焦点吗?在这种情况下,它是requestFocus()


setSelection(0)不起作用,我不想让焦点到第二个EditText,我只想把光标设置在第二个EditText中。 - nila
3
如果我没记错的话,当一个 EditText 请求焦点时,光标会被设置。阅读这篇文章 - Reno

13

假设editText2是您的第二个EditText视图,则将以下代码片段放置在 onResume()

editText2.setFocusableInTouchMode(true);
editText2.requestFocus();

或者放置

<requestFocus />
在第二个 EditText 视图的 XML 布局中。

12

请使用下面的代码行:

e2.setSelection(e2.length());

e2 是编辑文本的对象名称。


11

如果您想在EditText上的特定位置放置光标,可以使用:

yourEditText.setSelection(position);

此外,您可以设置初始和终止位置,以便您以编程方式选择某些文本,如下所示:

yourEditText.setSelection(startPosition, endPosition);
请注意,设置选择可能会比较棘手,因为您可以将光标放在字符之前之后,下面的图片解释了在这种情况下索引如何工作:

enter image description here

所以,如果您希望光标位于文本末尾,请将其设置为yourEditText.length()

10

有时候在编辑文本时,如果我们直接使用editText.setSelection(position);,光标并不会停留在特定的位置。

这种情况下,您可以尝试:

editText.post(new Runnable() {
                @Override
                public void run() {
                    editText.setSelection(string.length());
                }
            });

6
Edittext 中的 setSelection(int index) 方法应该可以让您实现这一操作。

4

这段代码可以帮助你将光标显示在编辑文本的最后位置。

 editText.requestFocus();
 editText.setSelection(editText.length());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接