2016-10-09 1 views
2

Material Design의 TextInputEditText에서 어떤 키를 눌렀는지 파악하려고하는데 키보드에서 아무 키나 누르더라도 onKey 메서드를 사용할 수 없습니다. 누군가 나를 도울 수 있습니까?안드로이드에서 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'로 시도했지만 Enter 키를 캡쳐해야하고 어떻게해야할지 몰랐습니다. 어쨌든 나는이 솔루션으로 관리 할 수 ​​있다고 생각합니다. 고맙습니다! –

관련 문제