2010-10-17 5 views
8

Comment supprimer le focus de l'élément de menu des options? C'est à dire. quand j'ouvre le menu pour la première fois, aucun des articles n'a le focus. Cependant, si je me concentre sur l'un d'eux en utilisant la boule de commande, puis ferme et ré-ouvre le menu, l'accent est toujours là. Comment puis-je m'en débarrasser?menu options - suppression de la mise au point de l'élément

J'efface et recréer le menu dans onPrepareOptionsMenu (comme je dois l'ajuster à l'état d'activité actuel).

EDIT:

public boolean onPrepareOptionsMenu(Menu menu){ 
    menu.clear(); 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.my_menu, menu); 

    return true; 
} 
+2

étiez-vous en mesure de trouver la solution? – dropsOfJupiter

+1

Pouvez-vous poster un code pour reproduire le problème? Je serai heureux de l'examiner pour vous. C'est un problème intéressant. –

Répondre

0

Une fois que vous utilisez la boule de commande (ou bien appuyez sur une autre touche du clavier), vous quittez touch mode. À partir de ce moment, il y aura une vue qui a le focus (vous pouvez le voir en appelant Activity.getCurrentFocus()). Ce mode persiste jusqu'à ce que vous touchiez à nouveau l'écran, auquel cas vous revenez en mode tactile et lorsque vous ouvrez le menu les fois suivantes, il n'y aura pas d'élément mis au point. Cela se produit dans chaque application Android que j'ai vu avec un menu.

Cette situation existe non seulement pour les éléments de menu d'options, mais également pour les vues de votre mise en page. Une fois que vous quittez le mode tactile, je ne pense pas qu'il existe un moyen d'y entrer à nouveau (et donc de supprimer le focus de toutes les vues) sauf si vous touchez l'écran. Une solution que j'ai vu citée pour supprimer les effets visibles de la mise au point (quand on n'est pas en mode tactile) consiste simplement à la donner à un élément qui n'est pas visible. Pourriez-vous créer une option de menu invisible et lui donner le focus lorsque vous voulez l'effacer? À moins que vous ne trouviez un moyen d'entrer par programmation, d'entrer de manière fiable le mode tactile ou de supprimer le focus de toutes les vues (en appelant le View.clearFocus(), il vous suffit de le passer à une autre vue!).