Auto Effondrement ActionBar SearchView sur le Clavier Souple à proximité
Je suis actuellement en utilisant une ActionBar élément de menu pour afficher un SearchView dans la barre d'action. Lorsque la recherche de l'élément de menu est développé le clavier virtuel est affiché qui est ce que je veux. Maintenant, lorsque l'utilisateur appuie sur la touche retour pour fermer le clavier, je tiens également à l'effondrement de la SearchView dans la barre d'action.
J'ai essayé la mise en oeuvre des auditeurs OnKeyListener et OnFocusChangeListener sur le MenuItem et la ActionView. J'ai également essayé d'utiliser OnBackPressed() dans l'Activité. Aucune de détecter lorsque le bouton de retour est utilisée pour fermer le clavier virtuel.
Des idées?
J'ai mis en œuvre OnActionExpandListener de savoir quand la SearchView est visible.
- Voici un très populaire répondre à stackoverflow.com/questions/1109022/...
- il ne sera pas l'aider, il a besoin d'intercepter la touche retour du clavier
- Quelle réponse? - Vous faire un commentaire sur une question...
Vous devez vous connecter pour publier un commentaire.
Je vais développer sur @user1258568 's réponse pour les paresseux. Cela a fonctionné pour moi. Notez qu'il efface votre requête lorsque le focus est perdu.
menu.getItem(yourSearchViewItemPosition)
à la place.setOnFocusChangeListener()
au lieu desetOnQueryTextFocusChangeListener()
. Avec votre méthode, tout fonctionne enfin. Je vous remercie.J'ai trouvé une meilleure solution.
La
OnQueryTextFocusChangeListener
qui est appelé lorsque le clavier est affiché ou masqué. Est appelé en premier lorsque le clavier est affiché et l'affichage de la recherche devra se concentrer. Est appelée à nouveau lorsquekeyboard
est caché et l'affichage de recherche va perdre le focus, peutclose search view
puis à l'aide deOnQueryTextFocusChangeListener
n'est PAS appelé lorsque le clavier est affiché ou masqué. Elle est appelée que lorsque lesearchView
vient d'orientation et d'ou sort de l'accent. Ainsi, lorsque l'SearchView
est mise au point pour la première fois, leOnQueryTextFocusChangeListener
est appelé et le clavier est affiché. Maintenant, si l'arrière est enfoncé, le clavier devient caché, mais leOnQueryTextFocusChangeListener
n'est pas appelé. En appuyant sur le bouton de retour pour une deuxième fois, lesearchView
s'effondre etOnQueryTextFocusChangeListener
est appelé.De Substituer onBackPressed comme ceci:
et votre onCreateOptionsMenu serait de gonfler la mSearchView comme ceci:
avez-vous de la classe de mettre en œuvre la suite comme ceci:
qui vous aurez également besoin de:
Vous aurez besoin de faire des "mSearchView" et "isClosed" à la fois des variables globales de l'activité.
android.support.v7.appcompat
cela peut être fait en utilisantMenuItemCompat.collapseActionView(menuItem)
qui reçoit le menu de l'élément de recherche dans votre actionbar.La réponse de Jon Willis fonctionne très bien. C'est une amélioration de sa réponse.
Tout d'abord, créez une nouvelle classe qui implémente
View.OnFocusChangeListener
:Ensuite, réglez le port d'écoute sur votre
SearchView
:Vous avez seulement besoin de mettre le "collapseActionView" attribut dans le menu mise en page
Qui va vous donner la fonctionnalité que vous regardez pour tous par lui-même.N'oubliez pas d'appeler la méthode "clearFocus" sur le SearchView pour fermer le clavier une fois que vous envoyer la requête.
C'est ce que j'ai fait pour rendre le clavier disparaître. Vous pouvez essayer de voir si cela fonctionne pour vous. J'ai mis le
searchView
invisible, puis à nouveau visible.C'est réalisable comme ceci:
Des Solutions basées sur setOnQueryTextFocusChangeListener() ne fonctionne pas pour moi, parce que l'événement n'a pas été lancé, le searchView ne pas perdre le focus lors de la soumission, sans doute parce que je effectuer une recherche dans la même activité que contient l'Affichage de la Recherche.
De toute façon, je pense que l'utilisation OnQueryTextListener est plus correcte, car elle décrit l'événement de soumettre un texte avec plus de précision.
Si vous souhaitez réduire clavier lorsque l'utilisateur clique sur l'icône de recherche sur le clavier
ceci peut être réalisé par simple
inside onquerytextsubmitted {
searchView.clearfocus()
}
Vous devez appeler setIconified deux fois.
À fait de l'effondrement de votre affichage de la recherche et de fermer le clavier.
Avec le premier texte d'appel de l'affichage de la recherche est effacé avec le deuxième appel du clavier et de la recherche en vue d'obtenir fermée.
Pour une raison quelconque,
menuItem.collapseActionView()
n'a pas fonctionné alors j'ai utilisésearchView.setIconified(true)
à la place.Ce qui donne le résultat ci-dessous le code de l'échantillon.