web-dev-qa-db-fra.com

comment masquer le clavier après avoir tapé EditText dans Android?

J'ai un EditText et un bouton alignés sur le bas du parent.

Lorsque j'entre du texte et que j'appuie sur le bouton pour enregistrer des données, le clavier virtuel ne disparaît pas.

Quelqu'un peut-il me guider pour cacher le clavier?

60
UMAR

Cela devrait marcher.

InputMethodManager inputManager = 
        (InputMethodManager) context.
            getSystemService(Context.INPUT_METHOD_SERVICE); 
inputManager.hideSoftInputFromWindow(
        this.getCurrentFocus().getWindowToken(),
        InputMethodManager.HIDE_NOT_ALWAYS); 

Assurez-vous simplement que this.getCurrentFocus () ne renvoie pas la valeur null, ce qui serait le cas si rien n’était actif.

110
Ryan Alford

Vous pouvez également vouloir définir les imeOptions dans le EditText. De cette façon, le clavier disparaîtra une fois que vous aurez appuyé sur Terminé:

<EditText
    Android:id="@+id/editText1"
    Android:inputType="text"
    Android:imeOptions="actionDone"/>
110
angelrh
   mEtNumber.setOnEditorActionListener(new TextView.OnEditorActionListener() {

            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                if (actionId == EditorInfo.IME_ACTION_DONE) {
                    // do something, e.g. set your TextView here via .setText()
                    InputMethodManager imm = (InputMethodManager) v.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                    return true;
                }
                return false;
            }
        });

et en xml

  Android:imeOptions="actionDone"
19
Ankita Chopra
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
10
sumit pandey

Je n'ai vu personne utiliser cette méthode:

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean focused) {
        InputMethodManager keyboard = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
        if (focused)
            keyboard.showSoftInput(editText, 0);
        else
            keyboard.hideSoftInputFromWindow(editText.getWindowToken(), 0);
    }
});

Et puis il suffit de demander le focus sur le editText:

editText.requestFocus();
4
Ofir

Solution incluse dans l'écouteur d'action EditText:

public void onCreate(Bundle savedInstanceState) {
    ...
    ...
    edittext = (EditText) findViewById(R.id.EditText01);
    edittext.setOnEditorActionListener(new OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if (event != null&& (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
                InputMethodManager in = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                in.hideSoftInputFromWindow(edittext.getApplicationWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
            }
            return false;
        }
    });
    ...
    ...
}
4
yohm

J'ai trouvé cela parce que mon EditText n'était pas automatiquement renvoyé à entrer. 

C'était mon code original.

editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if ( (actionId == EditorInfo.IME_ACTION_DONE) || ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) && (event.getAction() == KeyEvent.ACTION_DOWN ))) {

            // Do stuff when user presses enter

            return true;

        }

        return false;
    }
});

Je l'ai résolu en supprimant la ligne

return true;

après avoir fait des choses lorsque l'utilisateur appuie sur entrer.

J'espère que ça aide quelqu'un.

2
IsaiahJ

Cela fait quelques jours que je lutte avec cela et a trouvé une solution qui fonctionne vraiment bien. Le clavier virtuel est masqué lorsqu’une touche est effacée en dehors de l’EditText.

Code affiché ici: masquer le clavier par défaut lors d’un clic sur Android

1
Daniel

J'utilise cette méthode pour supprimer le clavier du texte modifié: 

 public static void hideKeyboard(Activity activity, IBinder binder) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (binder != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(binder, 0);//HIDE_NOT_ALWAYS
            inputManager.showSoftInputFromInputMethod(binder, 0);
        }
    }
}

Et cette méthode pour supprimer le clavier de l’activité (ne fonctionne pas dans certains cas - par exemple, lorsque edittext, clavier lié, focus perdu, cela ne fonctionne pas. Mais dans d’autres situations, cela fonctionne très bien, et vous n’avez pas se soucier de l'élément qui tient le clavier)

 public static void hideKeyboard(Activity activity) {
    if (activity != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);
        if (activity.getCurrentFocus() != null && inputManager != null) {
            inputManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
            inputManager.showSoftInputFromInputMethod(activity.getCurrentFocus().getWindowToken(), 0);
        }
    }
}
0
Anton Kizema

vous pouvez créer une classe singleton pour call facilement comme ceci:

public class KeyboardUtils {

    private static KeyboardUtils instance;
    private InputMethodManager inputMethodManager;

    private KeyboardUtils() {
    }

    public static KeyboardUtils getInstance() {
        if (instance == null)
            instance = new KeyboardUtils();
        return instance;
    }

    private InputMethodManager getInputMethodManager() {
        if (inputMethodManager == null)
            inputMethodManager = (InputMethodManager) Application.getInstance().getSystemService(Activity.INPUT_METHOD_SERVICE);
        return inputMethodManager;
    }

    @SuppressWarnings("ConstantConditions")
    public void hide(final Activity activity) {
        new Handler().post(new Runnable() {
            @Override
            public void run() {
                try {
                    getInputMethodManager().hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0);
                } catch (NullPointerException e) {
                    e.printStackTrace();
                }
            }
        });
    }
}

alors, après peut appeler dans l'activité comment le prochain formulaire:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity);
        KeyboardUtils.getInstance().hide(this);
    }

}
0
Alex Zaraos
int klavStat = 1; // for keyboard soft/hide button
int inType;  // to remeber your default keybort Type

editor - est un champ EditText

/// metod for onclick button ///
 public void keyboard(View view) {
        if (klavStat == 1) {
            klavStat = 0;

            inType = editor.getInputType();

            InputMethodManager imm = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.toggleSoftInput(0, InputMethodManager.HIDE_NOT_ALWAYS);


            editor.setInputType(InputType.TYPE_NULL);

            editor.setTextIsSelectable(true);



        } else {
            klavStat = 1;


            InputMethodManager imm = (InputMethodManager)
                    getSystemService(Context.INPUT_METHOD_SERVICE);

                imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

            editor.setInputType(inType);

        }
    }

Si vous avez un autre champ EditText, vous devez surveiller le changement de focus

0
D.Dzugo

Il suffit d'écrire ces deux lignes de code où l'option entrée fonctionnera.

InputMethodManager inputManager = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
0
Shahadat Hossain

Vous pouvez voir la réponse marquée en haut. Mais j’ai utilisé getDialog().getCurrentFocus() et ai bien travaillé. Je poste cette réponse parce que je ne peux pas taper "this" dans mon oncreatedialog.

Donc voici ma réponse. Si vous avez essayé une réponse marquée et que vous n'avez pas travaillé, vous pouvez simplement essayer ceci:

InputMethodManager inputManager = (InputMethodManager) getActivity().getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                inputManager.hideSoftInputFromWindow(getDialog().getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
0
Yasin Kaçmaz