2014-06-06 7 views
1

J'essaye de déterminer si un SearchView dans la barre d'action est focalisé. Mais quand j'appelle SearchView.isFocused(), je reçois toujours false, même lorsque la vue est vraiment focalisée (il y a un curseur à l'intérieur, et le clavier virtuel est affiché).SearchView.isFocused retourne toujours false

Comment puis-je vérifier si un SearchView est focalisé?

Répondre

1

Après quelques recherches, j'ai appris que SearchView.isFocused() retourne toujours false parce qu'il est une enfant du SearchView qui a vraiment l'accent, pas le SearchView lui-même. J'utilise le code suivant pour vérifier la mise au point d'un SearchView:

private boolean checkFocusRec(View view) { 
    if (view.isFocused()) 
     return true; 

    if (view instanceof ViewGroup) { 
     ViewGroup viewGroup = (ViewGroup) view; 
     for (int i = 0; i < viewGroup.getChildCount(); i++) { 
      if (checkFocusRec(viewGroup.getChildAt(i))) 
       return true; 
     } 
    } 
    return false; 
} 

Je demande donc checkFocusRec(searchView) pour vérifier la mise au point. Je ne suis pas sûr que ce soit la solution optimale, mais cela fonctionne pour moi.

0

Lorsque l'on examine cette question et son solution, j'ai trouvé des informations supplémentaires dans les fichiers de ressources inclus dans le SDK Android (dans le dossier/plates-formes sdk/android-xx/data/res/layout/search_view.xml).

Le focus de maintien de sous-vue a l'ID @+id/search_src_text et est de type android.widget.SearchView$SearchAutoComplete.

Je propose donc l'alternative suivante à la solution précédente:

private boolean isSearchViewFocused(SearchView sview) { 
    View et_search = sview.findViewById(R.id.search_src_text); 
    return et_search.isFocused(); 
} 
Questions connexes