Android - 在 EditText 中处理“Enter”

新手上路,请多包涵

我想知道是否有办法处理用户在输入 EditText 时按下 Enter 键,类似于 onSubmit HTML 事件。

还想知道是否有一种方法可以操作虚拟键盘,即“完成”按钮被标记为其他内容(例如“开始”)并在单击时执行特定操作(再次,如 onSubmit)。

原文由 Felix 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 783
2 个回答

我想知道是否有一种方法可以处理用户在输入 EditText 时按 Enter 键,例如 onSubmit HTML 事件。

是的。

还想知道是否有一种方法可以操作虚拟键盘,即“完成”按钮被标记为其他内容(例如“开始”)并在单击时执行特定操作(再次,如 onSubmit)。

也是的。

您将需要查看 android:imeActionIdandroid:imeOptions 属性,以及 setOnEditorActionListener() 方法,所有这些都在 TextView

要将“完成”按钮的文本更改为自定义字符串,请使用:

 mEditText.setImeActionLabel("Custom text", KeyEvent.KEYCODE_ENTER);

原文由 CommonsWare 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您使用 DataBinding,请参阅 https://stackoverflow.com/a/52902266/2914140https://stackoverflow.com/a/67933283/2914140

绑定.kt:

 @BindingAdapter("onEditorEnterAction")
fun EditText.onEditorEnterAction(callback: OnActionListener?) {
    if (callback == null) setOnEditorActionListener(null)
    else setOnEditorActionListener { v, actionId, event ->
        val imeAction = when (actionId) {
            EditorInfo.IME_ACTION_DONE,
            EditorInfo.IME_ACTION_SEND,
            EditorInfo.IME_ACTION_GO -> true
            else -> false
        }

        val keydownEvent = event?.keyCode == KeyEvent.KEYCODE_ENTER
            && event.action == KeyEvent.ACTION_DOWN

        if (imeAction or keydownEvent) {
            callback.enterPressed()
            return@setOnEditorActionListener true
        }
        return@setOnEditorActionListener false
    }
}

interface OnActionListener {
    fun enterPressed()
}

布局.xml:

 <data>
    <variable
        name="viewModel"
        type="YourViewModel" />
</data>

<EditText
    android:imeOptions="actionDone|actionSend|actionGo"
    android:singleLine="true"
    android:text="@={viewModel.message}"
    app:onEditorEnterAction="@{() -> viewModel.send()}" />

原文由 CoolMind 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题