2015-08-12 2 views
-1

Dans mon application, je montre \ hide sys-ui comme la barre de navigation \ status. je le fais en consommant l'événement « onSingleTapConfirmed » et a réussi à basculer betwwen cacher \ montrent ces ui-sys:onSingleTapConfirmed invoqué aussi pour cliquer sur le bouton de la barre d'action à 3 points, qui cause beaucoup de problèmes

@Override 
public boolean onSingleTapConfirmed(MotionEvent event) { 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if (sysBarsAreVisible) { 
       hideSystemUI(); 
      } else { 
       showSystemUI(); 
      } 
      break; 
    } 

    return true; 
} 

Cela fonctionne très bien. les barres de navigation et d'état s'affichent et se cachent comme prévu. le problème est que lorsque j'essaie d'appuyer sur le bouton 3dot (...) dans la barre d'action, l'événement tapotement unique invoque et masque la barre d'action et le menu flottant qui s'affiche et est parti juste après.

aucune idée comment puis-je le résoudre? comment reconnaître que le bouton 3 points est enfoncé et passer l'opération tout afficher \ masquer.

Merci

Répondre

0

Je résolus problème similaire en calculant si les coordonnées de contact sont dans des limites de vue ou à l'extérieur.

0

Selon Adam Fresko réponse .. i ajouté les lignes à mon code folowing:

@Override 
public boolean onSingleTapConfirmed(MotionEvent event) { 
    Log.d(TAG, "raw Y: " + event.getRawY()); 
    Log.d(TAG, "bar height: " + actionBar.getHeight()); 
    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: 
      if (event.getRawY() > actionBar.getHeight() * 1.2) { 

       if (sysBarsAreVisible) { 
        hideSystemUI(); 
       } else { 
        showSystemUI(); 
       } 
       return true; 
      } 
    } 

    return false; 
} 

i par rapport Y brut d'origine coordonnée contre la hauteur de l'action-barre pour savoir si l'action de l'utilisateur a été en dehors des limites de la barre d'action. J'ai aussi plusieurs tailles de barre d'action en 1.2 pour étendre les limites pour ceux qui ont de gros doigts :-).

Fonctionne parfaitement, merci!

0

La meilleure approche consiste à consommer l'événement à ACTION_UP, car ACTION_DOWN peut être consommé par ActionBar, ce qui rend ACTION_UP non déclenché dans votre programme d'écoute.

+0

Je l'ai essayé, et ACTION_DOWN fonctionne beaucoup plus facilement si vous voulez basculer l'état + les barres de navigation. l'interaction alors que ACTION_UP semble être très difficile à réaliser par rapport à ACTION_DOWN. – Yehudaz

+0

Eh bien, c'est parce que votre vue n'a pas d'autres événements (probablement) dans ce cas, vous verriez l'animation SwapingBars mais n'auriez pas les onClickActions. J'espère que tu as compris –