162 votes

Comment masquer le clavier virtuel lorsque l'activité démarre

J'ai un Edittext avec android:windowSoftInputMode="stateVisible" dans le Manifest. Maintenant, le clavier sera affiché lorsque je démarre l'activité. Comment le masquer? Je ne peux pas utiliser android:windowSoftInputMode="stateHidden" car lorsque le clavier est visible, puis que je réduis l'application et la reprendre, le clavier doit être visible. J'ai essayé avec

InputMethodManager imm = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);

mais ça n'a pas fonctionné.

6voto

Gibolt Points 4072

Si vous ne voulez pas utiliser XML, créez une extension Kotlin pour masquer le clavier

// Dans onResume, appelez ceci
myView.hideKeyboard()

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

Alternatives basées sur le cas d'utilisation:

fun Fragment.hideKeyboard() {
    view?.let { activity?.hideKeyboard(it) }
}

fun Activity.hideKeyboard() {
    // Appelle Context.hideKeyboard
    hideKeyboard(currentFocus ?: View(this))
}

fun Context.hideKeyboard(view: View) {
    view.hideKeyboard()
}

Comment afficher le clavier virtuel

fun Context.showKeyboard() { // Ou View.showKeyboard()
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.toggleSoftInput(SHOW_FORCED, HIDE_IMPLICIT_ONLY)
}

Méthode plus simple lors de la demande simultanée de focus sur un EditText

myEdittext.focus()

fun View.focus() {
    requestFocus()
    showKeyboard()
}

Simplification en bonus:

Supprimez le besoin d'utiliser getSystemService à jamais: Bibliothèque Splitties

// Simplifie la solution ci-dessus à juste
inputMethodManager.hideSoftInputFromWindow(windowToken, 0)

5voto

Adam Points 548

Pour masquer le clavier virtuel au moment du démarrage de la nouvelle activité ou dans les méthodes onCreate(), onStart(), etc., utilisez le code ci-dessous :

getActivity().getWindow().setSoftInputMode(WindowManager.
LayoutParams.SOFT_INPUT_STATE_HIDDEN);

Pour masquer le clavier virtuel lorsque le bouton est cliqué dans l'activité :

View view = this.getCurrentFocus();

    if (view != null) {
        InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
        assert imm != null;
        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
    }

5voto

Brinda Rathod Points 89

Utilisez SOFT_INPUT_STATE_ALWAYS_HIDDEN au lieu de SOFT_INPUT_STATE_HIDDEN

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

5voto

Sujeet Points 484

Les réponses ci-dessus sont également correctes. Je veux juste préciser qu'il y a deux façons de masquer le clavier au démarrage de l'activité, à partir de manifest.xml. par exemple:

  • La méthode ci-dessus le masque toujours en entrant dans l'activité.

ou

  • Celui-ci dit de ne pas le changer (par exemple, ne l'affichez pas s'il ne l'est pas déjà, mais s'il était ouvert en entrant dans l'activité, laissez-le ouvert).

5voto

Placez ce code dans votre fichier java et transmettez l'argument pour l'objet sur edittext,

private void setHideSoftKeyboard(EditText editText){
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X