2016-10-09 61 views
2

我試圖捕獲TextInputEditText(從材料設計)上按哪個鍵,雖然我按下鍵盤上的任何鍵我無法設法進入onKey方法。有人能幫助我嗎?註冊與Android中的TextInputEditText按下的鍵

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'嘗試過,但我也必須捕獲輸入密鑰,但我不知道如何去做。無論如何,我想我可以用這個解決方案來管理。謝謝! –