如何监听 android 编辑文本中的回车键?
How to listen for enter key in android edit text?
如何在 android 中监听回车键(通过模拟设备键盘,而不是计算机键盘)?我尝试了很多解决方案,包括将 onEditorActionListener 与各种不同的 IME 操作一起使用,将 onKeyListener 用于 Action.DOWN 或 KeyEvent.KEYCODE_ENTER - 以及两者的数十种变体。
将编辑文本设置为单行可行,但我希望编辑文本为多行,并且在按下回车键时仍然创建一个新行。其他几个答案在不同程度上起作用,但 none 提供了我想要的:一个 android 模拟器键盘输入键,它可以正常工作(创建新行),但也可以用来触发我自己的方法。
我知道这个问题已经被问过很多次了,但是 none 的答案在我的代码中有效。
这是我当前的基本代码。
characterNotesEditText.setOnEditorActionListener { _, actionId, event ->
Log.i("FragmentActivity", "It works")
return@setOnEditorActionListener true
}
如果在笔记本电脑上按下回车键,它会触发日志,但如果之前按下回车键,只会在模拟器键盘上触发。这一次有效,然后在模拟器键盘上按 enter 没有任何反应。
最后我放弃了使用 key listener 或 ime action listener,根据 CommonsWare 的建议,我使用了 textwatcher 来跟踪新行。
以下代码是我的最终解决方案,用例是在创建新行时查找并自动缩进它。 'toDelete' 布尔值用于确保可以通过缩进退格。
override fun beforeTextChanged(text: CharSequence?, p1: Int, p2: Int, p3: Int) {
val string: String = text.toString()
toDelete = string.length > 1 && string[string.length - 2] == '\n'
}
override fun onTextChanged(
txt: CharSequence,
start: Int,
before: Int,
count: Int
) {
if (!toDelete) {
val string: String = txt.toString()
if (string.isNotEmpty() && string[string.length - 1] == '\n') {
if (editText.selectionStart == txt.length || editText.selectionEnd == txt.length) {
editText.text.append(" ")
}
}
}
}
如何在 android 中监听回车键(通过模拟设备键盘,而不是计算机键盘)?我尝试了很多解决方案,包括将 onEditorActionListener 与各种不同的 IME 操作一起使用,将 onKeyListener 用于 Action.DOWN 或 KeyEvent.KEYCODE_ENTER - 以及两者的数十种变体。
将编辑文本设置为单行可行,但我希望编辑文本为多行,并且在按下回车键时仍然创建一个新行。其他几个答案在不同程度上起作用,但 none 提供了我想要的:一个 android 模拟器键盘输入键,它可以正常工作(创建新行),但也可以用来触发我自己的方法。
我知道这个问题已经被问过很多次了,但是 none 的答案在我的代码中有效。
这是我当前的基本代码。
characterNotesEditText.setOnEditorActionListener { _, actionId, event ->
Log.i("FragmentActivity", "It works")
return@setOnEditorActionListener true
}
如果在笔记本电脑上按下回车键,它会触发日志,但如果之前按下回车键,只会在模拟器键盘上触发。这一次有效,然后在模拟器键盘上按 enter 没有任何反应。
最后我放弃了使用 key listener 或 ime action listener,根据 CommonsWare 的建议,我使用了 textwatcher 来跟踪新行。
以下代码是我的最终解决方案,用例是在创建新行时查找并自动缩进它。 'toDelete' 布尔值用于确保可以通过缩进退格。
override fun beforeTextChanged(text: CharSequence?, p1: Int, p2: Int, p3: Int) {
val string: String = text.toString()
toDelete = string.length > 1 && string[string.length - 2] == '\n'
}
override fun onTextChanged(
txt: CharSequence,
start: Int,
before: Int,
count: Int
) {
if (!toDelete) {
val string: String = txt.toString()
if (string.isNotEmpty() && string[string.length - 1] == '\n') {
if (editText.selectionStart == txt.length || editText.selectionEnd == txt.length) {
editText.text.append(" ")
}
}
}
}