webentwicklung-frage-antwort-db.com.de

Virtuelle Tastatur beim Tastendruck schließen

Ich habe eine Activity mit einer EditText, einem Button und einer ListView. Der Zweck besteht darin, einen Suchbildschirm in die Variable EditText einzugeben, die Schaltfläche zu drücken und die Suchergebnisse diese Liste aufzufüllen.

Dies funktioniert alles einwandfrei, aber die virtuelle Tastatur verhält sich merkwürdig.

Wenn ich auf EditText klicke, erhalte ich die virtuelle Tastatur. Wenn ich auf der virtuellen Tastatur auf die Schaltfläche "Fertig" klicke, wird sie nicht mehr angezeigt. Wenn ich jedoch auf meine Suchschaltfläche klicke, bevor Sie auf der virtuellen Tastatur auf "Fertig" klicken, bleibt die virtuelle Tastatur und ich kann sie nicht entfernen. Durch Klicken auf die Schaltfläche "Fertig" wird die Tastatur nicht geschlossen. Es ändert die Schaltfläche "Fertig" von "Fertig" in einen Pfeil und bleibt sichtbar.

Danke für Ihre Hilfe

123
Andrew
mMyTextView.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (actionId == EditorInfo.IME_ACTION_SEARCH) {
            // hide virtual keyboard
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(m_txtSearchText.getWindowToken(), 
                                      InputMethodManager.RESULT_UNCHANGED_SHOWN);
            return true;
        }
        return false;
    }
});
55
Andrew
InputMethodManager inputManager = (InputMethodManager)
                                  getSystemService(Context.INPUT_METHOD_SERVICE); 

inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(),
                                     InputMethodManager.HIDE_NOT_ALWAYS);

Ich habe das nach dem onClick(View v)-Ereignis richtig gestellt. 

Sie müssen Android.view.inputmethod.InputMethodManager importieren.

Die Tastatur wird ausgeblendet, wenn Sie auf die Schaltfläche klicken.

289
Paul Maserrat

Verwenden Sie den folgenden Code

your_button_id.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        try  {
            InputMethodManager imm = (InputMethodManager)getSystemService(INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
        } catch (Exception e) {

        }
    }
});

Sie sollten OnEditorActionListener für Ihre EditView implementieren

public void performClickOnDone(EditView editView, final View button){
    textView.setOnEditorActionListener(new OnEditorActionListener() {

        @Override
        public boolean onEditorAction(EditView v, int actionId, KeyEvent event) {
            hideKeyboard();
            button.requestFocus();
            button.performClick();
            return true;
        }
    });

Und Sie verstecken die Tastatur durch:

public void hideKeybord(View view) {
    inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(),
                                  InputMethodManager.RESULT_UNCHANGED_SHOWN);
}

Sie sollten auch die Tastatur in Ihrer Taste verstecken, indem Sie onClickListener verwenden. 

Wenn Sie nun auf der virtuellen Tastatur und der Schaltfläche auf "Fertig" klicken, wird dasselbe ausgeführt: Tastatur ausblenden und Klickaktion ausführen.

13
pixel

Fügen Sie den folgenden Code in Ihr Schaltflächenklickereignis ein:

InputMethodManager inputManager = (InputMethodManager) getSystemService(this.INPUT_METHOD_SERVICE);
inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
11
Ashana.Jackol

Für Aktivitäten,

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

Verwenden Sie für Fragmente getActivity ()

getActivity (). getSystemService ();

getActivity (). getCurrentFocus ();

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(getActivity().getCurrentFocus().getWindowToken(), 0);
8
Priya Rajan

Da Sie nur einen Bearbeitungstext haben, rufen Sie einfach eine Aktion für diesen Bearbeitungstext in Ihrem Klick auf, und der Rest wird vom System übernommen. Wenn Sie mehr als einen Edittext hätten, wäre dies nicht so effizient, da Sie zuerst den fokussierten Edittext erhalten müssen. Aber in Ihrem Fall wird es perfekt funktionieren 

myedittext.onEditorAction(EditorInfo.IME_ACTION_DONE)
8
Laert

Diese Lösung funktioniert perfekt für mich:

private void showKeyboard(EditText editText) {
    editText.requestFocus();
    editText.setFocusableInTouchMode(true);
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.showSoftInput(editText, InputMethodManager.RESULT_UNCHANGED_SHOWN);
    editText.setSelection(editText.getText().length());
}

private void closeKeyboard() {
    InputMethodManager inputManager = (InputMethodManager) getApplicationContext().getSystemService(Context.INPUT_METHOD_SERVICE);
    inputManager.hideSoftInputFromWindow(this.getCurrentFocus().getWindowToken(), InputMethodManager.RESULT_UNCHANGED_SHOWN);
}
6

Versuche dies...

  1. Zum Anzeigen der Tastatur

    editText.requestFocus();
    InputMethodManager imm = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
    
  2. Für Tastatur ausblenden

    InputMethodManager inputManager = (InputMethodManager) ctx.getSystemService(Context.INPUT_METHOD_SERVICE); 
    inputManager.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
    
2
Affa Musaffa
View view = this.getCurrentFocus();
if (view != null) {
InputMethodManager imm =(InputMethodManager)this.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(view.getWindowToken(), 0);enter code here}
1

Sie verwenden diesen Code in Ihrem Schaltflächenklickereignis

// Check if no view has focus:
View view = this.getCurrentFocus();
if (view != null) {  
    InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
}
0
Pankaj Talaviya

Crash-Nullpunkt-Ausnahmefix: Ich hatte einen Fall, in dem sich die Tastatur möglicherweise nicht öffnet, wenn der Benutzer auf die Schaltfläche klickt. Sie müssen eine if -Anweisung schreiben, um zu überprüfen, dass getCurrentFocus () keine Null ist:

            InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        if(getCurrentFocus() != null) {
            inputManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
0
CacheMeOutside

Kotlin-Beispiel:

val inputMethodManager = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager

von Fragment: 

inputMethodManager.hideSoftInputFromWindow(activity?.currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)

von Aktivität:

inputMethodManager.hideSoftInputFromWindow(currentFocus?.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
0
norbDEV