2012-08-15 21 views
5

Chcę zastąpić przycisk Wstecz, gdy wyświetlana jest klawiatura ekranowa. Zasadniczo po naciśnięciu przycisku Wstecz chcę, aby klawiatura się odrzuciła i chcę dołączyć tekst do tego, co użytkownik wpisał w tym polu tekstowym. Zasadniczo muszę wiedzieć, kiedy klawiatura zostanie odrzucona. Po przeszukiwaniu zdałem sobie sprawę, że nie ma w tym interfejsu API i jedynym sposobem na zrobienie tego byłoby stworzenie twojej klasy EditText.Niestandardowy przycisk edycji tekstu i przycisk Wstecz w Androidzie

Więc tworzę własną klasę EditText i rozszerzony EditText jak ten

public class CustomEditText extends EditText 
{ 

    public CustomEditText(Context context) 
    { 
     super(context); 
     init(); 
    } 

    public CustomEditText(Context context, AttributeSet attrs) 
    { 
     super(context, attrs); 
     init(); 
    } 

    public CustomEditText(Context context, AttributeSet attrs, int defStyle) 
    { 
     super(context, attrs, defStyle); 
     init(); 
    } 

    private void init() 
    { 

    } 

} 

Dodałem także tę metodę

@Override 
     public boolean dispatchKeyEventPreIme(KeyEvent event) 
     { 
      if (KeyEvent.KEYCODE_BACK == event.getKeyCode()) 
      { 
       Log.v("", "Back Pressed"); 

          //Want to call this method which will append text 
          //init(); 
      } 
      return super.dispatchKeyEventPreIme(event); 
     } 

Teraz ta metoda nie zastąpi przycisk Wstecz, zamyka klawiaturę, ale nie wiem, jak przekazać tekst do pola EditText. Czy ktoś wie, jak bym to zrobił?

Kolejne szybkie pytanie, czy ktoś wie, dlaczego ta metoda nazywa się dwa razy? Jak widać na razie dodałem szybką wiadomość logcat, aby przetestować, że działa, ale kiedy kliknę przycisk "Wstecz", drukuje dwa razy, z jakiegokolwiek powodu, który by to zrobił?

Każda pomoc będzie bardzo ceniona !!

Odpowiedz

5

Jest to spowodowane wywołaniem dispatchKeyEventPreIme w obu ACTION_DOWN i ACTION_UP.
Będziesz musiał przetworzyć tylko po naciśnięciu przycisku KEY DOWN. Więc używać

if(event.getAction() == KeyEvent.ACTION_DOWN)

EDIT: do pierwszego pytania Można zrobić

setText(getText().toString() + " whatever you want to append"); 

w dispatchKeyEventPreIme

+0

Ach, głupiutki, powinienem to sobie uświadomić. Ale w odniesieniu do mojego drugiego pytania. Czy wiesz, jak przekazać tekst do pola EditText, gdy klawiatura zostanie odrzucona? – AdamM

+0

sprawdź edycję. – nandeesh

+0

Taki prosty fix. Dziękuję bardzo, działa idealnie !!! – AdamM

3

Dlaczego dwa razy? Prawdopodobnie metoda jest wywoływana w przypadku naciśnięcia i opuszczenia.

Powiązane problemy