10
votes

Comment faire la différence entre la touche longue touche et la touche régulière.

J'essaie de remplacer la fonctionnalité de la touche arrière. Lorsque l'utilisateur l'appuie une fois, je veux qu'il revenait à l'écran précédent. Cependant, lorsque la touche arrière est pressée à long terme (pour, disons, deux secondes ou plus), je veux quitter l'application.

À présent, j'ai envahi ces deux méthodes de mon activité: < PRE> XXX

mais le rappel sur Onkeylongress n'est jamais appelé, car l'événement est toujours reçu par la méthode ONKEYDOOD .

Y a-t-il un moyen de faire fonctionner les deux méthodes? Ou a-t-il d'être fait tout dans le ONKEYDOOD et utilisez le nombre de répétitions / millisecondes pour la détecter?


1 commentaires

Hay Vérifiez ce lien KeyEvent Doc


3 Réponses :


17
votes

La raison pour laquelle onkeylongress n'est jamais appelé, est que vous revenez true dans onekeydown sans raconter le cadre que cela pourrait être une presse longue - faisant l'arrêt du KeyEvent Écoulez à travers les différents gestionnaires d'événements.

Ce que vous devez faire est celui-ci:

  1. Avant de retourner true, appelez event.startracking () comme expliqué dans le Documentation .
  2. Poignez la touche longue dans Onkeylongress .

    implémente comme ci-dessous et fonctionnera: xxx


2 commentaires

Le problème est qu'avant de retourner vrai, je dois faire des choses complètement différentes si l'événement est pour une presse régulière ou une presse longue. Donc, dans tout cas, je dois détecter la presse longue sur la méthode oieydown avant d'appeler starttracking , n'est-ce pas?


J'ai édité les commentaires dans mon code pour montrer ce que je voulais dire. Je veux seulement retourner true dans onekedown si la touche est courte. Sinon, propagez au gestionnaire long keypress.



2
votes

Pourquoi ne pas utiliser OnKeyup () ainsi que OnKeydown () ? Au cours de OnKeydown () Vous ne savez pas si c'est une presse longue ou non, car cela est appelé dès que la touche est enfoncée et que vous ne savez pas combien de temps l'utilisateur a l'intention de déposer la clé. pour. Comme Kaspermoerch le dit correctement, vous devez appeler starttracking dans votre oilydown () méthode et renvoyer vrai . Puis dans votre onKeyup () Vous pouvez appeler event.istracking () et événement.longpress () pour déterminer s'il faut gérer les choses comme une longue Appuyez sur ou une pression courte.


1 commentaires

Ne fonctionne pas. ISTRACKING renvoie true mais islongress renvoie false, malgré le bouton pendant près de 5 secondes. Peut-être que cela ne peut pas être testé sur simulateur?



2
votes

Je pense que la meilleure façon de gérer est en tant que telle.

Le seul inconvénient que je peux voir ici, est-ce que vous cliquez sur le bouton de menu unique ne fait pas un son au cas où l'utilisateur l'a activé. Il existe peut-être un moyen de vérifier ce paramètre et d'utiliser cela, ou appelez le comportement par défaut.

code: xxx


0 commentaires