问题标签 [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.
android - Android:InputConnection 缺少 getSelection() 方法
为什么我有setSelection
in InputConnection
,但没有 a getSelection()
?
我应该只做一个getTextBeforeCursor(VERY_HIGH_NUMBER, 0)
并计算.length()
那个字符串的吗?
android - 输入连接-如何删除选定的文本?
我为android制作了一个自定义键盘。当我按下键盘的退格键时,我使用
从输入字段中删除一个字母。但是当我选择一些文本然后按退格键时,选定的文本不会被删除。我应该在输入连接中使用什么方法,以便在按下退格按钮时也从键盘中删除选定的文本?
android - 如何制作删除键 - 删除自定义 android 键盘中所有选定的编辑文本
我正在创建自定义 android 键盘,如果选择它们,我希望删除键删除所有编辑文本。
ie, when text is selected, clipboard(cut,copy,paste comes up); 在那种模式下,如果按下删除键,它应该删除所有。目前没有。
PS不要告诉我特定的编辑文本,它是一个自定义键盘,它无法访问编辑文本。
android - 使用 InputConnection.commitText 将光标设置在插入文本的开头
的文档InputConnection.commitText(CharSequence text, int newCursorPosition)
说这newCursorPosition
意味着:
int:文本周围的新光标位置,以 Java 字符表示。如果 > 0,这是相对于文本结尾的 - 1;如果 <= 0,这是相对于文本的开头。因此,值为 1 将始终将光标前进到插入全文之后的位置。请注意,这意味着您无法将光标定位在文本中,因为编辑器可以对您提供的文本进行修改,因此无法在此处正确指定位置。
在这个例子中,如果我输入两个字符,然后像这样将光标放在它们之间
然后输入另一个字符,我设置newCursorPosition
为0
or都没关系1
。光标始终位于插入的末尾。例如调用
或者
两者都像这样显示光标:
如果我这样-1
做
我明白了
根据文档,预期结果1
和-1
结果。为什么不0
将光标放在插入的开头?我希望0
应该是这样的
但事实并非如此。为什么不?
android - 从 Android 中的自定义键盘在 EditText 上设置撰写文本
解释我想要做什么
我正在制作一个自定义应用内键盘,其工作原理与此示例相同。但是,在我的键盘中,我使用弹出窗口来显示额外的字母形式。在传统的蒙古文中,字母有不同的形式,具体取决于它们是位于单词的开头、中间还是结尾。通常这些可以从上下文中确定,但有时用户需要从弹出键候选中明确选择替代形式。
假设用户开始输入一个单词(其中-
代表字母):
然后他们a
从弹出窗口中选择(我只是a
用来表示选择一种特殊的蒙古字形形式的概念)。如果他们继续输入,这封信的 Unicode 将呈现如下:
但是,Unicode 呈现为
在词尾。(a
并且A
在 Unicode 中有相同的代码。)所以用户很困惑为什么他们a
从弹出键中选择,但它会像A
在编辑器中一样呈现。但是,如果他们只是继续打字,那会很好,因为它会呈现a
在单词的中间。
我想要做的是在 of 上设置某种临时跨度a
,---a
这样它就不会像---A
在他们键入下一个字母之前那样被渲染。但是如果他们添加一个空格或将光标移动到不同的位置,那么它将恢复---A
为最终字母的默认形式。(即临时跨度将被取消。)
真实例子
如果抽象a
而A
过于混乱,这里有一个真实的例子。用户想在这个词中输入一个蒙古语UE
形式(Unicode )\u1826\u180c
但是因为\u1826\u180c
在词尾呈现这样
用户在继续输入之前会感到困惑。我希望跨度使它看起来像这样
可以用 . 临时渲染\u1826\u180c\u200d
。
文档
文件说_
如果您的 IME 进行文本预测或需要多个步骤来编写字形或单词,您可以在文本字段中显示进度,直到用户提交单词,然后您可以将部分合成替换为完整的文本。
它给出了这个例子和图像:
问题
我打算在本节中描述它为什么不起作用,但在此处设置我的问题的过程中,我发现它确实有效。因此,我将在下面添加我的答案作为其他人做类似事情的示例。
android - 用户更改选择时如何将撰写文本提交给 InputConnection
我正在制作一个自定义键盘,并且必须在提交之前设置组合文本。这在本问答中有所描述。
我一般都知道如何提交文本
但是如果用户通过触摸EditText
. 通过观察其他键盘,我知道这是可能的,因为他们这样做了。但是在我的键盘上,如果我有
再改变光标位置,留下作曲跨度。将来的任何更改都将替换组成跨度,而不是在新的光标位置输入。
用于光标位置更改的Android EditText 后监听器为您可以对 a 做什么提供了一些想法,但在自定义键盘中,除了给我EditText
的内容外,我无法访问。EditText
InputConnection
我如何处理知道光标/选择何时移动?
在我开始写它之后,我一直在寻找我的问题的答案。我将在下面发布答案。
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 按下,而只是上面的警告?
谢谢
android - 物理键盘不调用 BaseInputConnection 方法
我有一个在其方法EditText
中提供自定义BaseInputConnection
对象的自定义。onCreateInputConnection()
问题在于,软键盘喜欢commitText()
和deleteSurroundingText()
正在调用这些方法,但物理键盘没有调用这些方法(在 Pixelbook 中测试)。
android - InputConnectionWrapper 未最终确定,导致 Android 内存泄漏
在某些情况下,我创建一个EditText,将值传递给另一个Fragment,然后在EditText所属的ViewGroup上调用removeAllViews来删除EditText。
问题是与 EditText 关联的 InputConnectionWrapper 仍在占用内存。
在上面的 Heap Dump 中,InputConnectionWrapper 分配了 300 多个,并且占用了相当多的内存。
但是开启Heap Dump后,Activity中只有一个EditText,由于对应的EditText,判断InputConnectionWrapper没有创建。
要关闭 InputConnectionWrapper,我尝试了以下功能。
但是, InputConnectionWrapper 似乎随着时间的推移分配得更多,因为它尚未最终确定。
InputConnectionWrapper 不会最终确定的原因是什么?
android - Android自定义InputConnection新失败
我有一个自定义 webview,我使用(通过contenteditable
)作为富文本编辑器。为了容纳一些东西,我也有一个自定义InputConnection
.
直到最近,这一直运行良好——我怀疑最近的 Android/WebView
更新。
我InputConnection
通过覆盖我WebView
的派生类来构造onCreateInputConnection
:
MyInputConnection
好像:
这曾经很好用。但现在我得到:
所以它似乎不喜欢我的 InputConnection 正在运行的线程?即使它应该调用WebView
's original InputConnection
?
就像我说的,令人费解的部分是这几天前还在工作。(它现在至少在 Gboard 和 SwiftKey 上失败了,但奇怪的是,它似乎仍然像最初在 Hacker's Keyboard 上一样工作。)