2016-10-09 8 views
2

Я пытаюсь захватить, какая клавиша нажата на TextInputEditText (из Material Design), и хотя я нажимаю любую клавишу с клавиатуры, мне не удается войти в метод onKey. Может кто-нибудь мне помочь?Регистрация нажатых клавиш с TextInputEditText в Android

txtInputApo.setOnKeyListener(new View.OnKeyListener() { 
     @Override 
     public boolean onKey(View v, int keyCode, KeyEvent event) { 
      Log.i("onKey","true"); 
      if(event.getAction() == KeyEvent.ACTION_UP){ 
       switch (keyCode){ 
        case KeyEvent.KEYCODE_SPACE: 
         String Espaces = txtInputApo.getText().toString().replaceAll(" ", ""); 
         txtInputApo.setText(Espaces); 
         txtInputApo.setSelection(Espaces.length()); 
         break; 

       } 
      } 

      return false; 
     } 
    }); 

Спасибо!

ответ

3

View.OnKeyListener был создан в основном для ввода аппаратных средств. В большинстве случаев лучше использовать TextWatcher вместо этого сценария (мониторинг и изменение пользовательского ввода).

Вы можете сделать что-то вроде этого, чтобы достичь желаемого результата с TextWatcher:

TextWatcher watcher = 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) { 
      String editableString = s.toString(); 
      if (editableString.contains(" ")) { 
       final String spaceFreeString = editableString.replaceAll(" ", ""); 
       txtInputApo.setText(spaceFreeString); 
       txtInputApo.setSelection(spaceFreeString.length()); 
      } 
     } 
    }; 
    txtInputApo.addTextChangedListener(watcher); 
+0

Спасибо! Раньше я пытался использовать TextWatcher, но мне также нужно взять ключ ввода, и я не знал, как это сделать. В любом случае, я думаю, что смогу справиться с этим решением. Спасибо! –