2013-06-20 6 views
9

J'ai un EditText à l'intérieur d'un fragment, qui est lui-même dans un onglet actionbarsherlock. Lorsque je touche dans la zone EditText, un clavier virtuel apparaît avec l'une des touches comportant une icône de loupe (recherche). Lorsque je tape du texte et que je clique sur la touche de recherche, je peux traiter la chaîne saisie dans mon onEditorAction, mais le clavier logiciel reste affiché. Comment puis-je le fermer par programmation? Par ailleurs si une réponse est que je pourrais configurer certains paramètres pour EditText de telle sorte qu'il se ferme automatiquement sur la recherche, j'aimerais toujours savoir si le clavier logiciel peut être fermé avec un appel de méthode car j'ai aussi mon propre bouton de recherche sur l'écran (rien à voir avec le clavier logiciel) et je voudrais que le clavier virtuel se ferme quand on appuie dessus.Comment faire pour fermer le clavier logiciel dans le fragment

Note: Avant que quelqu'un se précipite pour affirmer que cette question est une répétition d'une question précédente, j'ai vu beaucoup de Q & A à propos de cacher le clavier logiciel à divers points. La plupart des réponses semblent excessivement compliquées et, dans la plupart des cas, il n'est pas clair si l'idée est de masquer le clavier de manière permanente ou juste de le fermer temporairement jusqu'à ce que l'utilisateur appuie de nouveau sur un champ EditText. De plus, certaines réponses nécessitent des appels à des méthodes non disponibles en fragments.

+0

Une partie amusante est que, comme vous avez recherché d'autres messages, cacher le clavier dans Android manuellement est très WTF-pourquoi-mon-appareil-n'est-pas-appliqué. Je vous recommande à l'esprit de secours en cas de situation involontaire. Ou, changez votre application UX. :( – Youngjae

Répondre

37

Dans mes fragments je ferme le clavier simplement ainsi:

public static void closeKeyboard(Context c, IBinder windowToken) { 
    InputMethodManager mgr = (InputMethodManager) c.getSystemService(Context.INPUT_METHOD_SERVICE); 
    mgr.hideSoftInputFromWindow(windowToken, 0); 
} 

closeKeyboard(getActivity(), yourEditText.getWindowToken()); 
2

J'utilise ce code dans un fragment

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(
          Context.INPUT_METHOD_SERVICE); 
         imm.hideSoftInputFromWindow(text.getWindowToken(), 0); 

lorsque je clique sur une icône de la barre d'action et cela fonctionne, je ne vois pas pourquoi il ne devrait pas travailler dans votre cas (peut-être je mal compris la question).

7

Ceci est le code de fonctionnement pour masquer le clavier logiciel pour Android.

try { 
      InputMethodManager input = (InputMethodManager) activity 
        .getSystemService(Activity.INPUT_METHOD_SERVICE); 
      input.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); 
     }catch(Exception e) { 
      e.printStackTrace(); 
     } 
0

Vous pouvez vérifier ma réponse here. C'était la seule façon qui a fonctionné pour moi à l'intérieur du fragment.

-1

Travailler dans Fragment

getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); 
0

Une manière claire de fermer le clavier et clearfocus d'un EditText intérieur d'un fragment, est de vous assurer que votre XML EditText a:

android:id="@+id/myEditText"  
android:imeOptions="actionDone" 

Ensuite, réglez écouteur à votre EditText (avec Kotlin, et à partir d'un fragment):

myEditText.setOnEditorActionListener({ v, actionId, event -> 
      if (actionId == EditorInfo.IME_ACTION_DONE) { 
       myEditText.clearFocus() 
       val imm = activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 
       imm.hideSoftInputFromWindow(view!!.windowToken, 0)  
      } 
      false 
     }) 
Questions connexes