2012-10-14 22 views
9

Pracuję na systemie Android. Poprzednio używałem onKeyListener do obsługi określonej akcji na zdarzeniu kluczowym.Jak obsłużyć klawisz Enter Korzystanie z funkcji TextWatcher na Androidzie

Jednak ten sposób nie rozwiązuje mojego problemu, ponieważ prawie wszystkie klucze zostaną wyłączone po zaimplementowaniu tego odbiornika do mojego EditText. Po przeczytaniu niektórych tematów w SO, wiem, że powinienem używać TextWatchera zamiast, ale nadal zastanawiam się, jak obsługiwać zdarzenie kluczowe klucza ENTER w środku, ponieważ parametry podane tam są tylko CharSequence, Editable, itp. Nie znalazłem żadnych parametrów keyCode.

+0

'Jednak ten sposób nie rozwiązuje mojego problemu, ponieważ prawie wszystkie klawisze zostaną wyłączone, gdy zaimplementuję tego słuchacza w moim EditText.", Jak twój kod jest nieprawidłowy. Powinno działać. z 'text watcherem' nie możesz uzyskać' Enter event' –

+1

dlaczego moje pytanie zostało odrzucone? – mrkhv

Odpowiedz

7

spróbować

protected View.OnKeyListener onEnter = new View.OnKeyListener() { 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if ((event.getAction() == KeyEvent.ACTION_DOWN) 
       && (keyCode == KeyEvent.KEYCODE_ENTER)) { 
      //here do what you want 
     } 
     return false; // very important 
    } 
}; 
+3

Zgodnie z dokumentem: _Uwaga, gdy klucz sprzętowy jest wywoływany w widoku._ – Divers

+2

Jak powiedział Divers, KeyListener faktycznie nasłuchuje kluczy sprzętowych (głośność, dom itp.). – Waclock

14

spróbować tej

@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    if (s.length()>0 && s.subSequence(s.length()-1, s.length()).toString().equalsIgnoreCase("\n")) { 
     //enter pressed 
    } 
} 
+0

użytkownik2348959 dzięki za odpowiedź super rozwiązanie –

+0

@ user2348959 ta metoda nie nadaje się do tego celu. Jeśli przejdziesz do linii z tylną przestrzenią, to również zostanie wywołana. –

+0

@ user2348959 działa, jeśli pojawi się nowa linia na końcu ciągu .. ale nie działa nowa linia pojawia się pomiędzy ciągiem znaków – Pallavi

0

myślę, że to jest lepsze rozwiązanie, ponieważ można nacisnąć klawisz „Enter” w dowolnym miejscu swojej dziedzinie EditText a nie tylko na koniec linii.

edittext.addTextChangedListener(new TextWatcher() { 
     public void afterTextChanged(Editable s) { 
     } 

     public void beforeTextChanged(CharSequence s, int st, int ct, 
             int af) { 
     } 

     public void onTextChanged(CharSequence s, int start, int before, int count) { 
      if (s.length() < 1 || start >= s.length() || start < 0) 
       return; 

      // If it was Enter 
      if (s.subSequence(start, start + 1).toString().equalsIgnoreCase("\n")) { 

       // Change text to show without '\n' 
       String s_text = start > 0 ? s.subSequence(0, start).toString() : ""; 
       s_text += start < s.length() ? s.subSequence(start + 1, s.length()).toString() : ""; 
       edittext.setText(s_text); 

       // Move cursor to the end of the line 
       edittext.setSelection(s_text.length()); 
      } 
     } 
    }); 
Powiązane problemy