Android-naciśnij klawisz klawiatury
Chcę złapać naciśnięcie dowolnego klawisza softkeyboard. Nie chcę, aby w mojej aktywności był wyświetlany widok EditView lub TextView, zdarzenie musi być obsługiwane z rozszerzonego widoku wewnątrz mojej aktywności.
Właśnie próbowałem tego:
1) nadpisuje metodę aktywności onKeyUp(int keyCode, KeyEvent event)
. To nie działa z softkeyboard, to po prostu złapać kilka hardkeyboard.
2) Utwórz moje OnKeyListener
i zarejestruj to, moim zdaniem, które zawiera zarejestrowane i działające OnTouchListener
. To w ogóle nie działa z softkeyboard.
3) nadpisuje metodę widoku onKeyUp(int keyCode, KeyEvent event)
. To w ogóle nie działa, ani jeśli ustawiłem mój OnKeyListener, ani jeśli go nie ustawiłem.
4) przy pomocy obiektu InputMethodManager
wywołuję metodę showSoftInput
i przekazuję jej mój pogląd. To nie działa ani na podniesienie klawiatury, w rzeczy samej muszę zadzwonić toggleSoftInput
; ani złapać zdarzenia klawiszy.
4 answers
Do obsługi kluczy sprzętowych i tylnych, których możesz użyć dispatchKeyEvent(KeyEvent event)
w twoim Activity
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Log.i("key pressed", String.valueOf(event.getKeyCode()));
return super.dispatchKeyEvent(event);
}
UPD: niestety nie możesz obsługiwać zdarzeń z miękką klawiaturą (Zobacz obsługa zdarzeń z pojedynczym klawiszem), chyba że stworzysz własną, niestandardową klawiaturę (kliknij link, aby dowiedzieć się, jak tworzyć metodę wprowadzania).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-26 13:12:56
Z podpowiedzią vasart mogę uzyskać Zdarzenie KeyPress. Aby keycode był drukowany użyłem funkcji getUnicodeChar przekazując mu stan przycisku meta, a następnie po prostu rzucenie znaku rozwiązuje problem.
To jest Kodeks roboczy :
@Override
public boolean dispatchKeyEvent(KeyEvent KEvent)
{
int keyaction = KEvent.getAction();
if(keyaction == KeyEvent.ACTION_DOWN)
{
int keycode = KEvent.getKeyCode();
int keyunicode = KEvent.getUnicodeChar(KEvent.getMetaState() );
char character = (char) keyunicode;
System.out.println("DEBUG MESSAGE KEY=" + character + " KEYCODE=" + keycode);
}
return super.dispatchKeyEvent(KEvent);
}
Oczywiście działa tylko ze znakiem ASCII.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-05 16:50:50
Nie ma opcji obsługi zdarzeń naciśnięcia klawiszy na miękkiej klawiaturze (klawiaturze ekranowej) tylko z klawiatury sprzętowej.
Więcej Szczegółów: Obsługa akcji klawiatury
Uwaga: podczas obsługi zdarzeń klawiatury za pomocą klasy KeyEvent i powiązane API, należy się spodziewać, że takie zdarzenia klawiatury pochodzą tylko z klawiatury sprzętowej. Nigdy nie należy polegać na odbieraniu klucza zdarzenia dla dowolnego klawisza w metodzie miękkiego wprowadzania (Klawiatura ekranowa).
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-07-25 12:28:42
Gdy klawiatura jest otwarta w aktywności, Twoja aktywność staje się pierwszoplanowa... Wszystkie TextArea lub pola tekstowe mają swój własny mechanizm, aby uzyskać naciśnięcie klawiszy z klawiatury ekranowej... jeśli chcesz użyć onkeydown () listner dla klawiatury wirtualnej upewnij się, że ustawiłeś w AndroidManifest plik pod swoją działalnością android: windowSoftInputMode= "stateAlwaysVisible" następnie onkeydown () będzie działać to nie pracował dla mnie ...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-04 13:23:59