J'ai un fragment qui contient un texte d'édition. Lorsque vous appuyez sur Modifier le texte, le clavier s'affiche. Lorsque vous appuyez sur le bouton Enregistrer dans le coin supérieur, l'application revient au fragment précédent, mais le clavier persiste.
J'aimerais que le clavier soit caché lors de la navigation vers le fragment précédent.
Veuillez noter que j'ai essayé cette solution: Fermer/masquer le Android Soft Keyboard .
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(myView.getWindowToken(), 0);
J'ai essayé d'utiliser ceci dans les deux fragments, dans la méthode onCreate.
J'ai également essayé de masquer le clavier virtuel dans la disposition:
Android:windowSoftInputMode="stateAlwaysHidden"
Malheureusement, rien de tout cela n'a fonctionné.
J'aurais posté quelques photos, mais je n'ai pas encore assez de réputation. J'apprécierais toute aide et opinion constructives et n'oublie pas que "Un homme sage peut apprendre plus d'une question stupide qu'un imbécile peut apprendre d'une réponse sage." :)
Cordialement, Alexandra
Mettez le code qui cache le clavier dans votre écouteur de clic "bouton Enregistrer" et utilisez cette méthode pour masquer le clavier:
public static void hideKeyboard(Activity activity) {
InputMethodManager inputManager = (InputMethodManager) activity
.getSystemService(Context.INPUT_METHOD_SERVICE);
// check if no view has focus:
View currentFocusedView = activity.getCurrentFocus();
if (currentFocusedView != null) {
inputManager.hideSoftInputFromWindow(currentFocusedView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}
Moyen le plus simple de masquer le clavier dans un fragment ou une activité
Soluton: 1
//hide keyboard
public static void hideKeyboard(Context ctx) {
InputMethodManager inputManager = (InputMethodManager) ctx
.getSystemService(Context.INPUT_METHOD_SERVICE);
// check if no view has focus:
View v = ((Activity) ctx).getCurrentFocus();
if (v == null)
return;
inputManager.hideSoftInputFromWindow(v.getWindowToken(), 0);
}
Solution: 2
InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
Pour Kotlin, vous pouvez l'utiliser comme fonction de niveau supérieur, ajoutez simplement le code à une classe distincte telle que Utils.kt
.
fun hideKeyboard(activity: Activity) {
val inputMethodManager =
activity.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
// Check if no view has focus
val currentFocusedView = activity.currentFocus
currentFocusedView?.let {
inputMethodManager.hideSoftInputFromWindow(
currentFocusedView.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
}
}
Pour y accéder à partir de Fragment, appelez-le comme:
hideKeyboard(activity as YourActivity)
Merci à Silvia H pour Java code.
@Override
public void onDestroyView() {
super.onDestroyView();
View view = getActivity().getCurrentFocus();
if (view != null) {
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
}
public void hideKeyboard(Activity activity) {
InputMethodManager inputManager = (InputMethodManager) activity
.getSystemService(Context.INPUT_METHOD_SERVICE);
// check if no view has focus:
View currentFocusedView = activity.getCurrentFocus();
if (currentFocusedView != null) {
inputManager.hideSoftInputFromWindow(currentFocusedView.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
}
}