【问题标题】:Better way to get all the text in an EditText from an InputConnection?从 InputConnection 获取 EditText 中所有文本的更好方法?
【发布时间】:2011-11-18 09:49:40
【问题描述】:

我编写了一个 IME (InputMethodService),我需要从它正在编辑的 EditText 中获取所有文本。我知道一种方法:

InputConnection inputConnection = getCurrentInputConnection();
inputConnection.append(inputConnection.getTextBeforeCursor(9999, 0))
.append(inputConnection.getTextAfterCursor(9999, 0));

它有效,但它看起来非常愚蠢和笨重。但是没有这种方法InputConnection.getText()

有没有更好的办法?

附:我无法从 IME 访问 EditText,因为它属于父应用程序,所以请不要告诉我使用 EditText.getText(),除非您知道获取 EditText 的方法!

【问题讨论】:

  • 另外,请注意,getTextBeforeCursorgetTextAfterCursor 不包括所选文本(如果有选择)。

标签: android android-edittext android-input-method


【解决方案1】:

我的解决方案是使用 getExtractedText()。我不确定这是否有一些限制,但到目前为止对我有用。

CharSequence currentText = inputConnection.getExtractedText(new ExtractedTextRequest(), 0).text;

【讨论】:

  • 这似乎在 Marshmallow 6 和 6.0.1 中不再起作用,我对其进行了多次测试,并得到了一些用户的确认。
  • 它在某些应用程序中无法正常工作,例如我在 Ms Word 应用程序中遇到的问题。在 Word 女士中,我没有得到完整的文本。你找到解决办法了吗?
  • @MohammadAlBanna & Kinamand 你找到解决方案了吗?
  • @PravinSuthar 你找到解决方案了吗?如果是,你能把它贴在这里吗?我需要它。
  • @ChiragPrajapati 还没有兄弟。
【解决方案2】:

这里还有另一种方法:

inputConnection.performContextMenuAction(android.R.id.selectAll);
CharSequence sData =  inputConnection.getSelectedText(0);

【讨论】:

  • 不幸的是,该方法在 v2.1 中不可用(我仍在使用),但无论如何谢谢你,我投票赞成,因为它仍然是一个正确的答案。
  • 有人在 Marshmallow 中尝试过吗?因为它在这里不起作用。谢谢!
猜你喜欢
  • 1970-01-01
  • 2013-12-13
  • 2021-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多