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.

Przetestowałem wszystko tylko w emulatorze, ale myślę, że wystarczy. Dlaczego to tak skomplikowane wziąć proste Zdarzenie klawiszy z klawiatury ?
Author: Vineet Setia, 2012-06-30

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).

 41
Author: vasart,
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.

 17
Author: Bemipefe,
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).

 4
Author: phnmnn,
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 ...

 2
Author: Danish,
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