问题标签 [inputconnection]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
924 浏览

android - Android:InputConnection 缺少 getSelection() 方法

为什么我有setSelectionin InputConnection,但没有 a getSelection()

我应该只做一个getTextBeforeCursor(VERY_HIGH_NUMBER, 0)并计算.length()那个字符串的吗?

0 投票
2 回答
3566 浏览

android - 输入连接-如何删除选定的文本?

我为android制作了一个自定义键盘。当我按下键盘的退格键时,我使用

从输入字段中删除一个字母。但是当我选择一些文本然后按退格键时,选定的文本不会被删除。我应该在输入连接中使用什么方法,以便在按下退格按钮时也从键盘中删除选定的文本?

0 投票
2 回答
1419 浏览

android - 如何制作删除键 - 删除自定义 android 键盘中所有选定的编辑文本

我正在创建自定义 android 键盘,如果选择它们,我希望删除键删除所有编辑文本。

ie, when text is selected, clipboard(cut,copy,paste comes up); 在那种模式下,如果按下删除键,它应该删除所有。目前没有。

PS不要告诉我特定的编辑文本,它是一个自定义键盘,它无法访问编辑文本。

0 投票
1 回答
612 浏览

android - 使用 InputConnection.commitText 将光标设置在插入文本的开头

的文档InputConnection.commitText(CharSequence text, int newCursorPosition)说这newCursorPosition意味着:

int:文本周围的新光标位置,以 Java 字符表示。如果 > 0,这是相对于文本结尾的 - 1;如果 <= 0,这是相对于文本的开头。因此,值为 1 将始终将光标前进到插入全文之后的位置。请注意,这意味着您无法将光标定位在文本中,因为编辑器可以对您提供的文本进行修改,因此无法在此处正确指定位置。

这个例子中,如果我输入两个字符,然后像这样将光标放在它们之间

在此处输入图像描述

然后输入另一个字符,我设置newCursorPosition0or都没关系1。光标始终位于插入的末尾。例如调用

或者

两者都像这样显示光标:

在此处输入图像描述

如果我这样-1

我明白了

在此处输入图像描述

根据文档,预期结果1-1结果。为什么不0将光标放在插入的开头?我希望0应该是这样的

在此处输入图像描述

但事实并非如此。为什么不?

0 投票
1 回答
1672 浏览

android - 从 Android 中的自定义键盘在 EditText 上设置撰写文本

解释我想要做什么

我正在制作一个自定义应用内键盘,其工作原理与此示例相同。但是,在我的键盘中,我使用弹出窗口来显示额外的字母形式。在传统的蒙古文中,字母有不同的形式,具体取决于它们是位于单词的开头、中间还是结尾。通常这些可以从上下文中确定,但有时用户需要从弹出键候选中明确选择替代形式。

假设用户开始输入一个单词(其中-代表字母):

然后他们a从弹出窗口中选择(我只是a用来表示选择一种特殊的蒙古字形形式的概念)。如果他们继续输入,这封信的 Unicode 将呈现如下:

但是,Unicode 呈现为

在词尾。(a并且A在 Unicode 中有相同的代码。)所以用户很困惑为什么他们a从弹出键中选择,但它会像A在编辑器中一样呈现。但是,如果他们只是继续打字,那会很好,因为它会呈现a在单词的中间。

我想要做的是在 of 上设置某种临时跨度a---a这样它就不会像---A在他们键入下一个字母之前那样被渲染。但是如果他们添加一个空格或将光标移动到不同的位置,那么它将恢复---A为最终字母的默认形式。(即临时跨度将被取消。)

真实例子

如果抽象aA过于混乱,这里有一个真实的例子。用户想在这个词中输入一个蒙古语UE形式(Unicode )\u1826\u180c

在此处输入图像描述

但是因为\u1826\u180c在词尾呈现这样

在此处输入图像描述

用户在继续输入之前会感到困惑。我希望跨度使它看起来像这样

在此处输入图像描述

可以用 . 临时渲染\u1826\u180c\u200d

文档

文件说_

如果您的 IME 进行文本预测或需要多个步骤来编写字形或单词,您可以在文本字段中显示进度,直到用户提交单词,然后您可以将部分合成替换为完整的文本。

它给出了这个例子和图像:

在此处输入图像描述

问题

我打算在本节中描述它为什么不起作用,但在此处设置我的问题的过程中,我发现它确实有效。因此,我将在下面添加我的答案作为其他人做类似事情的示例。

0 投票
2 回答
2958 浏览

android - 用户更改选择时如何将撰写文本提交给 InputConnection

我正在制作一个自定义键盘,并且必须在提交之前设置组合文本。这在本问答中有所描述。

我一般都知道如何提交文本

但是如果用户通过触摸EditText. 通过观察其他键盘,我知道这是可能的,因为他们这样做了。但是在我的键盘上,如果我有

再改变光标位置,留下作曲跨度。将来的任何更改都将替换组成跨度,而不是在新的光标位置输入。

用于光标位置更改的Android EditText 后监听器为您可以对 a 做什么提供了一些想法,但在自定义键盘中,除了给我EditText的内容外,我无法访问。EditTextInputConnection

我如何处理知道光标/选择何时移动?

在我开始写它之后,我一直在寻找我的问题的答案。我将在下面发布答案。

0 投票
1 回答
106 浏览

android - 硬件 BACK Btn 第一次不工作

我有许多片段被添加(而不是替换)一个在另一个之上。他们也被添加到后面的堆栈中,除了第一个。

片段 A -> 片段 B -> 片段 C

当我在 Fragment B 上时,Hardware Back Btn press 工作正常,因此返回到 Fragment A。但是在 Fragment C 上,当我按下 Hardware Back Btn 时,第一次没有任何反应,我只得到以下日志:

W/IInputConnectionWrapper:非活动 InputConnection 上的 finishComposingText

之后,在第二次尝试 Hardware back Btn press 时,在活动中调用 onBackPressed() 并弹出 Fragment C 并且 Fragment B 可见。

我在 Fragment C 的 TextInputLayout 中确实有一些编辑文本包装器,但不确定它们是如何导致这种行为的,如果有的话。

有人可以帮我弄清楚为什么没有调用片段 C onBackPressed() 中的第一次硬件返回 Btn 按下,而只是上面的警告?

谢谢

0 投票
1 回答
181 浏览

android - 物理键盘不调用 BaseInputConnection 方法

我有一个在其方法EditText中提供自定义BaseInputConnection对象的自定义。onCreateInputConnection()问题在于,软键盘喜欢commitText()deleteSurroundingText()正在调用这些方法,但物理键盘没有调用这些方法(在 Pixelbook 中测试)。

0 投票
1 回答
281 浏览

android - InputConnectionWrapper 未最终确定,导致 Android 内存泄漏

在某些情况下,我创建一个EditText,将值传递给另一个Fragment,然后在EditText所属的ViewGroup上调用removeAllViews来删除EditText。

问题是与 EditText 关联的 InputConnectionWrapper 仍在占用内存。

在此处输入图像描述

在上面的 Heap Dump 中,InputConnectionWrapper 分配了 300 多个,并且占用了相当多的内存。

但是开启Heap Dump后,Activity中只有一个EditText,由于对应的EditText,判断InputConnectionWrapper没有创建。

要关闭 InputConnectionWrapper,我尝试了以下功能。

但是, InputConnectionWrapper 似乎随着时间的推移分配得更多,因为它尚未最终确定。

InputConnectionWrapper 不会最终确定的原因是什么?

0 投票
0 回答
317 浏览

android - Android自定义InputConnection新失败

我有一个自定义 webview,我使用(通过contenteditable)作为富文本编辑器。为了容纳一些东西,我也有一个自定义InputConnection.

直到最近,这一直运行良好——我怀疑最近的 Android/WebView更新。

InputConnection通过覆盖我WebView的派生类来构造onCreateInputConnection

MyInputConnection好像:

这曾经很好用。但现在我得到:

所以它似乎不喜欢我的 InputConnection 正在运行的线程?即使它应该调用WebView's original InputConnection?

就像我说的,令人费解的部分是这几天前还在工作。(它现在至少在 Gboard 和 SwiftKey 上失败了,但奇怪的是,它似乎仍然像最初在 Hacker's Keyboard 上一样工作。)