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)
{
}
);
Czy próbowałeś zaproponować podejście? Czy to było przydatne? – Zelimir
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
Jesteś tego pewien? Działa poprawnie dla mnie również w przypadku liter. Na którym telefonie testowałeś? – Zelimir