Обработка клавиши Enter на Jelly Bean

Делаю приложение, в этом приложении редактирую текст. Я хочу, чтобы когда пользователь писал какой-то текст в конце редактирования текста, затем нажимал кнопку ввода, я хочу, чтобы он вызывал какую-то команду. Это то, что я сделал. Это работает в ICS, но когда я пытаюсь использовать другое устройство (Jelly Bean), это не работает.

inputViaTextChatbot.setOnEditorActionListener(new OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
                // hide the keyboard  
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                // process 
                getThis = inputViaTextChatbot.getText().toString();
                if (getThis!=null && getThis.length()>1) {  
                    try {
                    Log.v("Got This: ", getThis);
                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    inputViaTextChatbot.setText("");  
                }
            }    
            return false;
        }
    });

может ли кто-нибудь помочь мне сделать это?


person mas_bejo    schedule 17.02.2014    source источник


Ответы (1)


Это известная ошибка, из-за которой клавиша Enter не распознается на нескольких устройствах. Обходной путь, чтобы избежать этого и заставить его работать, будет следующим:

Создайте TextView.OnEditorActionListener следующим образом:

TextView.OnEditorActionListener enterKey = new TextView.OnEditorActionListener() {
  public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_GO) {
      // Do whatever you need
    }
    return true;
  }
};

Предположим, что ваш View является EditText, например, вам нужно установить его следующим образом:

final EditText editor = (EditText) findViewById(R.id.Texto);
editor.setOnEditorActionListener(enterKey);

Последний шаг — присвоить EditText следующий атрибут:

android:imeOptions="actionGo"

Это в основном изменяет поведение клавиши ввода по умолчанию, устанавливая для нее параметр actionGo IME. В вашем обработчике просто назначьте ему созданный вами прослушиватель, и таким образом вы получите поведение enter key.

person nKn    schedule 17.02.2014