Android 完成输入事件而不提交

Android 完成输入事件而不提交,android,android-edittext,Android,Android Edittext,我正在尝试创建一个editText,自动完成用户键入的文本。例如,只有在用户键入某些内容(如Lon)后,应用程序才能建议使用伦敦,因此在Lon之后插入don。我确实有给我建议的服务,但我不知道在用户写了一些东西之后才使用什么样的事件来调用此服务(我不想在每封信之后调用此服务) 我尝试过这个,但它只在用户按submit之后才起作用,但我想捕获事件“用户不再键入” 更不重要的是,如何在一个编辑文本中同时包含用户文本和提示 非常感谢。试试OnKeyListener: bornCityTxt.setOn

我正在尝试创建一个editText,自动完成用户键入的文本。例如,只有在用户键入某些内容(如Lon)后,应用程序才能建议使用伦敦,因此在Lon之后插入don。我确实有给我建议的服务,但我不知道在用户写了一些东西之后才使用什么样的事件来调用此服务(我不想在每封信之后调用此服务)

我尝试过这个,但它只在用户按submit之后才起作用,但我想捕获事件“用户不再键入”

更不重要的是,如何在一个编辑文本中同时包含用户文本和提示

非常感谢。

试试OnKeyListener:

bornCityTxt.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View view, int i, KeyEvent keyEvent) {
            //your code
            return true;
        }
});

希望这有帮助

您可以添加一个侦听器,然后在后文本中检查已输入的字母数

Handler h = new Handler();
editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if(s.toString().length()>0){
                h.removeCallbacksAndMessages(null); // Cancels previous call
                h.postDelayed(new Runnable() {

                      @Override
                      public void run()
                      {
                         //do something with entered text
                      }
                 }, 1000); // 1 second 
            }
            else{


            }
        }
    });

我尝试了这个解决方案,但出于某种原因,尽管文本更改后会抛出事件,但我键入的字母在方法解决后会显示在edittext中,因此在调用服务器后也是如此。我不知道你的应用程序中到底发生了什么,但是如果你在延迟后呼叫你的服务怎么办。编辑代码
Handler h = new Handler();
editText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if(s.toString().length()>0){
                h.removeCallbacksAndMessages(null); // Cancels previous call
                h.postDelayed(new Runnable() {

                      @Override
                      public void run()
                      {
                         //do something with entered text
                      }
                 }, 1000); // 1 second 
            }
            else{


            }
        }
    });