onKeyDown und onKeyLongPress

8

Ich möchte, dass meine Anwendung anders auf ein normales und ein langes Tastenereignis der Lautstärketasten reagiert.

Ich habe dies bereits gesehen, aber wenn Ich halte die Lautstärke-Taste gedrückt, ich bekomme eine Menge KeyDown Events, bevor ich das KeyLongPressed -Ereignis erhalte.

Ich hätte gerne ein Ereignis oder das andere, nicht beides, so dass ich die Lautstärke mit einem kurzen Druck einstellen und einen Titel bei einem langen Tastendruck überspringen kann.

Können Sie mir hier helfen?

Das ist mein Code:

%Vor%

Jede Hilfe wird geschätzt!  - Iris

    
friday 18.10.2012, 08:26
quelle

4 Antworten

14

Hier ist der Code, den ich geschrieben habe. Es wirkt wie ein Zauber. Vielleicht können Sie es für eine bessere Logik optimieren. Aber du wirst es verstehen. Der Schlüssel ist die Verwendung von Flags. Kurz drücken ist eine Taste, bei der wir die Lautstärketaste für kurze Zeit drücken und loslassen . Mit onKeyUp können Sie also kurze Druckvorgänge erkennen.

%Vor%

Logcat für alle langen Druckvorgänge (Kein kurzer Druck festgestellt):

%Vor%

Logcat für alle kurzen Druckvorgänge:

%Vor%     
VendettaDroid 18.10.2012, 09:10
quelle
4

Als ich im Begriff war, meine Antwort zu posten, fand ich heraus, dass jemand schon eine Lösung hatte ...

Aber hier ist meiner, einfach und funktioniert wie ein Zauber. Nur eine Flagge;)

Dieser Code erkennt Kurz- und Langdruck, bei langem Druck wird kein Druck ausgelöst!

Hinweis: Wenn Sie das normale Lautstärke-Auf- und Abwärts-Verhalten möchten, ändern Sie in der onKeyPress-Methode den Rückgabewert true wie folgt in den Super-Aufruf:

%Vor%

Code ohne Super-Aufruf:

%Vor%

Code hier unten ist mit der Lauter-Taste hinzugefügt, nur wählen Sie Ihre Seite;)

%Vor%     
Rolf ツ 18.10.2012 09:20
quelle
3

Korrekte Art und Weise entsprechend dem SDK, lange Tastendrücke zu handhaben.

%Vor%     
Simon 14.09.2013 07:30
quelle
0

Ich weiß nicht, ob diese Antwort eine akzeptable Lösung für Ihr Problem bietet, da sie darauf angewiesen ist, häufige KeyDown -Ereignisse konstant zu bekommen.

Sie könnten versuchen, sich an die Systemzeit zu erinnern, wenn das letzte KeyDown -Ereignis ausgelöst wird (ich nenne es tLast ), und alle KeyDown -Ereignisse ignorieren, bis Sie ein KeyLongPressed -Ereignis erhalten.

Um die "richtigen" KeyDown -Ereignisse zu erhalten (die, die du im vorherigen Schritt ignoriert hast), könntest du einen Thread überprüfen, ob der Zeitunterschied zwischen der aktuellen Systemzeit und tLast (ich werde it tDelta ) ist groß genug, um nicht als kontinuierlicher Druck betrachtet zu werden.

Da viele KeyDown -Ereignisse in kurzer Zeit geworfen werden, könnte theoretisch festgestellt werden, dass die Lautstärkeschaltfläche nicht kontinuierlich gedrückt wurde, wenn die Ereignisse genügend weit voneinander entfernt sind ( tDelta ist größer als ein fester Wert) ).

Der Nachteil dieser Lösung ist, dass, wenn der Benutzer die Lautstärketaste wirklich schnell drückt ( tDelta zwischen den Druckmaschinen ist niedriger als der feste Wert, der zum Bewerten einer kontinuierlichen Druckmaschine verwendet wird), die Mehrfachtasten werden ignoriert / als kontinuierlicher Tastendruck angesehen.

Ein weiterer (kleinerer) Nachteil ist, dass es eine Verzögerung vor der Interpretation der regulären Tastendrücke geben würde, da tDelta größer sein müsste als der feste Wert, der bei der Auswertung verwendet wird, wenn es sich um einen regulären oder kontinuierlichen Schlüssel handelt Drücken Sie.

Grüße,

Lucian

BEARBEITEN: Hmm ... Zweiter Gedanke: Verwenden Sie nicht eine KeyListener Android-Implementierung?

Wenn Sie dies verwenden, überprüfen Sie die dafür definierte Methode onKeyUp .

Ich denke, es wäre eleganter, wenn Sie nur diese Klasse (oder eine davon abgeleitete Klasse) erweitern und die Methode onKeyUp verwenden würden, um festzustellen, ob es sich um eine kontinuierliche Druckmaschine handelt (dh um die Zeit, die die Schaltfläche hat) gedrückt gehalten wurde, ist größer als ein fester Wert).

Wenn Sie diese Methode verwenden können, tun Sie es bitte. Es ist außerdem effizienter, einfacher zu warten und unkomplizierter als die oben dargestellte Lösung.

KeyListener Javadoc

    
lucian.pantelimon 18.10.2012 08:47
quelle

Tags und Links