2010-11-13 12 views

Odpowiedz

13

Odpowiedź na to pytanie powinna być dwojaka. Określa się to sposobem generowania klucza. Jeśli był naciśnięty klawisz sprzętowy, oba podejścia opisane poniżej są prawidłowe. Jeśli był naciśnięty klawisz oprogramowania, zależy to od aktualnego kontekstu.

1.) Jeśli klucz był wynik z naciskając na klawiaturze programowej, który został otrzymany przez długie naciśnięcie na klawisz menu:

Musisz dokładnie zastąpić następującą funkcję:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 

    switch (keyCode) { 
     case KeyEvent.KEYCODE_A: 
     { 
      //your Action code 
      return true; 
     } 
    } 
    return super.onKeyDown(keyCode, event); 
} 

2 .) Jeśli twoja aktywność zawiera EditText i został uzyskany z tego softkeyboard, to pierwsze podejście nie działa, ponieważ wydarzenie key było już zużywane przez EditText. Trzeba użyć Zmieniono tekst Listener:

mMyEditText.addTextChangedListener(new TextWatcher() 
{ 
    public void afterTextChanged(Editable s) 
    { 
    } 
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    { 
     /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/ 
    } 
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    { 
    } 
); 
+0

Czy próbowałeś zaproponować podejście? Czy to było przydatne? – Zelimir

+0

Ta funkcja przechwytuje tylko zdarzenia związane z kluczowymi kluczami, takie jak powrót i menu, ale nie obsługuje miękkich klawiszy wejściowych. – ozmank

+0

Jesteś tego pewien? Działa poprawnie dla mnie również w przypadku liter. Na którym telefonie testowałeś? – Zelimir

4

kod Zelimir działa jeśli wersja ssoo wynosi do 2,3 Jeśli masz ten kod działa w 2.3 to nie działa w ogóle, sposób kontrolowania klawiszy zdarzeń w wszystko ssoo wersja jest z dispatchKeyEvent()

@Override 
    public boolean dispatchKeyEvent(KeyEvent event) { 
     Log.d("hello", String.valueOf(event.getKeyCode())); 
     return super.dispatchKeyEvent(event); 
    } 

Dzięki temu można kontrolować wciśnięty klawisz w WebView lub gdziekolwiek jesteś. Jedynym błędem jest to, że nie możesz kontrolować "przycisku akcji" ... nie wiesz dlaczego.

1

Spróbuj tego, działa to doskonale.

@Override 
public boolean onKeyUp (int keyCode, KeyEvent event){ 
char c = (char) event.getUnicodeChar(); 
//Do something.... 
return super.onKeyUp(keyCode, event); 
} 
Powiązane problemy