Android - 从EditText中获取选定的文本

10

我正在尝试实现复制/粘贴功能。如何从EditText中获取文本选择?

EditText et=(EditText)findViewById(R.id.title);

单击按钮的onclick监听器:

int startSelection=et.getSelectionStart();
int endSelection=et.getSelectionEnd();

那我就卡住了。有什么想法吗?

5个回答

16

看起来您已经完成了难点,找到了所选区域。现在您只需从完整文本中提取该子字符串即可。

请尝试以下操作:

String selectedText = et.getText().substring(startSelection, endSelection);

这只是一个基本的 Java字符串操作


7
Android 中一个小不满是 getSelectionStart() 和 getSelectionEnd() 方法是根据选中文本的顺序来确定,这并不一定意味着 Start < End ...(在这里不是很重要,但记住这一点很好,可以避免一些越界错误)。 - andy
大家好,我正在按照你们的答案进行操作,但是我的getselectionStart()和getSelectionEnd()方法出现了问题。两者都返回相同的值。 - FpontoDesenv
et.getText() 返回一个可编辑对象。substring() 需要一个字符串。你需要添加 toString()。也就是说 - et.getText().toString().substring(start, end)。 - earlcasper

0

您可以通过以下方式从EditText中获取所选文本:

EditText editText = (EditText) findViewById(R.id.editText3);
int min = 0;
int max = editText.getText().length();
if (editText.isFocused()) {
    final int selStart = editText.getSelectionStart();
    final int selEnd = editText.getSelectionEnd();
    min = Math.max(0, Math.min(selStart, selEnd));
    max = Math.max(0, Math.max(selStart, selEnd));
}
// here is your selected text
final CharSequence selectedText = editText.getText().subSequence(min, max);
String text = selectedText.toString();

0
你应该使用 Editable 对象的特殊函数:
Editable txt = et.getText();
txt.replace(int st, int en, CharSequence source)

该命令将指定部分(st..en)替换为字符串(CharSequence)。


0

String selectedText = et.getText().toString().substring(startSelection, endSelection);
getText() 方法返回一个可编辑的对象,而 substring 需要一个字符串类型的参数。因此需要使用 toString() 方法将它们连接起来。


0

您不需要做那么多,只需长按编辑文本即可显示所有相关选项,如复制/粘贴/选择等。如果您想保存文本,请使用 mbaird 显示的方法。


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