android EditText - 完成输入事件

新手上路,请多包涵

我想在用户完成编辑 EditText 时捕获一个事件。

怎么做到呢?

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

阅读 1.1k
2 个回答

当用户完成编辑后,他/她将按下 DoneEnter

 ((EditText)findViewById(R.id.youredittext)).setOnEditorActionListener(
    new EditText.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (actionId == EditorInfo.IME_ACTION_SEARCH ||
                    actionId == EditorInfo.IME_ACTION_DONE ||
                    event != null &&
                    event.getAction() == KeyEvent.ACTION_DOWN &&
                    event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
                if (event == null || !event.isShiftPressed()) {
                   // the user is done typing.

                   return true; // consume.
                }
            }
            return false; // pass on to other listeners.
        }
    }
);

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

Kotlin 中最简单的方法是:

 fun TextView.addOnFinishedTypingListener(runnable: Runnable) {
    val handler = Handler(Looper.getMainLooper())
    addTextChangedListener(
        { _, _, _, _ -> },
        { _, _, _, _ -> handler.removeCallbacks(runnable) },
        { handler.postDelayed(runnable, 1000) }
    )
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q || handler.hasCallbacks(runnable)) {
                handler.removeCallbacks(runnable)
                runnable.run()
            }
        }
        false
    }
}

你可以这样称呼它:

 binding.yourtextfield.addOnFinishedTypingListener {
    //TODO your stuff
}

它会在用户停止输入一秒钟或按下完成后触发该操作。要使后者工作,您还需要在 xml 中:

   android:imeOptions="actionDone"

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

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