4350 Stimmen

Wie kann man die Android-Softtastatur programmgesteuert schließen/ausblenden?

Ich habe eine EditText und eine Button in meinem Layout.

Nachdem Sie in das Eingabefeld geschrieben und auf die Schaltfläche Button Ich möchte die virtuelle Tastatur ausblenden, wenn ich außerhalb der Tastatur berühre. Ich nehme an, dass dies ein einfaches Stück Code ist, aber wo kann ich ein Beispiel dafür finden?

19 Stimmen

Was ist, wenn Sie nur einen EditText und mehrere Schaltflächen, wie Kontrollkästchen und Radios, haben? Der einzige Ort, an dem Sie die Tastatur benötigen, ist der einzelne EditText. Wie registrieren Sie, dass etwas anderes gewählt/angeklickt wurde, um die Tastatur auszublenden?

19 Stimmen

Ich komme mir dumm vor. Ich bin nicht in der Lage, die Tastatur auf ICS zu verstecken. Habe alle Methoden hier und Kombinationen von ihnen versucht. Keine Chance. Die Methode, um es zu zeigen, funktioniert, aber ich kann es nicht verstecken, egal, was windw Token, verstecken Flaggen, manifestieren Einstellungen oder Kerzen zu jedem Heiligen. Auf der Tastatur zeigen, sehe ich immer diese: I/LatinIME( 396): InputType.TYPE_NULL ist angegeben W/LatinIME( 396): Unerwartete Eingabeklasse: inputType=0x00000000 imeOptions=0x00000000

5 Stimmen

/** * Diese Methode wird verwendet, um die Soft-Tastatur auszublenden. * @param activity */ public void hideSoftKeyboard(Activity activity) { InputMethodManager inputMethodManager = (InputMethodManager)activity.getSystemService(Activity.INPUT_METHOD_SERVICE); inputMethodManager.hideSoftInputFromWindow(activity.getCurrentFocus().getWindowToken(), 0); }

166voto

Jeyavel Punkte 2884

Bitte versuchen Sie den folgenden Code in onCreate()

EditText edtView = (EditText) findViewById(R.id.editTextConvertValue);
edtView.setInputType(InputType.TYPE_NULL);

3 Stimmen

Diese Methode funktioniert als Mittel, um den "can't hide the soft keyboard"-Fehler in 2.0 und 2.1 zu umgehen, wie in code.google.com/p/Android/issues/detail?id=7115 ... die hideSoftInputFromWindow Methode oben aufgeführt hat nicht funktioniert, wenn ich es versucht, aber editView.setInputType(0) tat.

22 Stimmen

Dies ist legitim pro Javadoc (nicht ein Hack), obwohl ich die Methode als umschreiben würde editView.setInputType(InputType.TYPE_NULL);

3 Stimmen

Das funktioniert, allerdings wird der Android:hint ausgeblendet. ich benutze Android 1.5

157voto

Nguyen Minh Binh Punkte 22811

Aktualisierung: Ich weiß nicht, warum diese Lösung nicht mehr funktioniert (ich habe gerade auf Android 23 getestet). Bitte verwenden Sie die Lösung von Saurabh Pareek stattdessen. Hier ist sie:

InputMethodManager imm = (InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE);
//Hide:
imm.toggleSoftInput(InputMethodManager.HIDE_IMPLICIT_ONLY, 0);
//Show
imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

Alte Antwort:

//Show soft-keyboard:
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
//hide keyboard :
 getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

8 Stimmen

Wo sollte ich diesen Code platzieren? Ich habe versucht, getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); in onCreate() einzufügen, aber die Tastatur wird nie versteckt

0 Stimmen

Funktioniert nicht, getestet in radioGroup.setOnCheckedChangeListener, API 23

0 Stimmen

Wenn Sie genauer hinsehen, werden InputMethodManager.HIDE_IMPLICIT_ONLY und InputMethodManager.SHO

104voto

Sreedev Punkte 6415
protected void hideSoftKeyboard(EditText input) {
    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    imm.hideSoftInputFromWindow(input.getWindowToken(), 0);    
}

5 Stimmen

Das hat bei mir funktioniert! Aber warum haben Sie input.setInputType(0) ? Ich konnte nicht mit dem EditTextView als ich diese Code-Zeile hatte (sie funktionierte, als ich sie entfernte).

0 Stimmen

Wahrscheinlich input.getContext().getSystemService(Context.INPUT_METHOD_SER‌​VICE) .

0 Stimmen

Ich entfernte input.setInputType(0); aus diesem Code. Er änderte ein Tastaturverhalten und inputType für die EditText .

88voto

Rotemmiz Punkte 7743

Wenn alle anderen Antworten hier nicht so funktionieren, wie Sie es gerne hätten, gibt es eine weitere Möglichkeit, die Tastatur manuell zu steuern.

Erstellen Sie eine Funktion, mit der Sie einige der EditText Eigenschaften:

public void setEditTextFocus(boolean isFocused) {
    searchEditText.setCursorVisible(isFocused);
    searchEditText.setFocusable(isFocused);
    searchEditText.setFocusableInTouchMode(isFocused);

    if (isFocused) {
        searchEditText.requestFocus();
    }
}

Stellen Sie dann sicher, dass onFocus der Datei EditText Sie öffnen/schließen die Tastatur:

searchEditText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (v == searchEditText) {
            if (hasFocus) {
                // Open keyboard
                ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).showSoftInput(searchEditText, InputMethodManager.SHOW_FORCED);
            } else {
                // Close keyboard
                ((InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE)).hideSoftInputFromWindow(searchEditText.getWindowToken(), 0);
            }
        }
    }
});

Wenn Sie nun die Tastatur manuell öffnen möchten, rufen Sie an:

setEditTextFocus(true);

Und für den Schlussappell:

setEditTextFocus(false);

0 Stimmen

+1 - Wenn Sie eine Aktivität mit geschlossener Tastatur starten möchten, verwenden Sie diese Lösung und fügen Sie einen onclicklistener hinzu, der setEditTextFocus(true) setzt. Funktioniert wie ein Zauberspruch!

0 Stimmen

In der 7. und 10. Zeile des zweiten Code-Blocks erhielt ich die Meldung "Cannot resolve symbol context".

0 Stimmen

Stattdessen getContext() verwenden

73voto

Alex Punkte 5701

Saurabh Pareek hat die bisher beste Antwort.

Man kann aber auch die richtigen Flaggen verwenden.

/* hide keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
    .toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

/* show keyboard */
((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
    .toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);

Beispiel für die tatsächliche Verwendung

/* click button */
public void onClick(View view) {      
  /* hide keyboard */
  ((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
      .toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);

  /* start loader to check parameters ... */
}

/* loader finished */
public void onLoadFinished(Loader<Object> loader, Object data) {
    /* parameters not valid ... */

    /* show keyboard */
    ((InputMethodManager) getSystemService(Activity.INPUT_METHOD_SERVICE))
        .toggleSoftInput(0, InputMethodManager.HIDE_IMPLICIT_ONLY);

    /* parameters valid ... */
}

1 Stimmen

Dies ist die effizienteste Lösung für die neueste Version. Für ältere Versionen wird man immer etwas nachbessern müssen. Vor allem vor v3.

2 Stimmen

@Mazen: verwenden fragment.getActivity().getSystemService();

0 Stimmen

Dies ist die umfassendste Antwort, die sowohl das Zeigen als auch das Verbergen abdeckt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X