Wie verstecke ich die Tastatur nach der Eingabe von EditText in Android?

72

Ich habe eine EditTextund Schaltfläche am unteren Rand der Eltern ausgerichtet.

Wenn ich Text eingebe und die Taste zum Speichern von Daten drücke, verschwindet die virtuelle Tastatur nicht.

Kann mir jemand zeigen, wie man die Tastatur versteckt?

UMAR-MOBITSOLUTIONS
quelle
Meinen Sie nicht einen EditText (keine TextView)?
SMBiggs

Antworten:

126

Das sollte funktionieren.

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

Stellen Sie einfach sicher, dass this.getCurrentFocus () nicht null zurückgibt, was der Fall wäre, wenn nichts den Fokus hat.

Ryan Alford
quelle
folgende Fehler bekommt oncreate Kann nicht einen statischen Verweis auf die nicht-statische Methode getSystemService (String) vom Typ machen
UMAR-MOBITSOLUTIONS
32
InputMethodManager imm = (InputMethodManager) getSystemService (Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow (myEditText.getWindowToken (), 0); arbeitet jetzt ...
UMAR-MOBITSOLUTIONS
2
Bei dieser Methode müssen Sie die Softtastatur nicht ausblenden. Siehe die Antwort von @angelrh unten zusammen mit den Kommentaren, die besagen, dass in OnEditorActionListener false zurückgegeben werden soll, und dass Sie Ihren Bearbeitungstext aus xml als singleLine = true markieren sollen.
Nilesh
getCurrentFocus () bekommt null
android_jain
@android_jain Das liegt daran, dass es nichts gibt, das den Fokus hat.
Ryan Alford
133

Möglicherweise möchten Sie auch die imeOptions im EditText definieren. Auf diese Weise verschwindet die Tastatur, sobald Sie auf Fertig drücken:

<EditText
    android:id="@+id/editText1"
    android:inputType="text"
    android:imeOptions="actionDone"/>
Angelrh
quelle
41
Dies gilt nur, wenn Sie das Ereignis bei der Implementierung nicht nutzen onEditorAction([...]). Durch die Rückkehr truewird verhindert, dass sich die Tastatur korrekt versteckt.
Eric
9
Die Softtastatur wird geschlossen, sobald Sie auf "Fertig" oder "Suchen" für "actionDone" oder "actionSearch" klicken. In onEditorActionListener müssen Sie jedoch "false" zurückgeben.
Alexhilton
7
Dies und android:singleLine="true".
Simas
1
@ Simas android:singleLine="true"es ist veraltet und es funktioniert nicht mit maxLines=1. Irgendwelche Ideen?
Borja
1
@ Borja singleLinewurde ersetzt durch maxLines=1. Sollte wie vorgesehen funktionieren. Erstellen Sie eine separate Frage, wenn dies nicht der Fall ist.
Simas
25
   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;
            }
        });

und in xml

  android:imeOptions="actionDone"
Ankita Chopra
quelle
11
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
sumit pandey
quelle
9

Ich habe niemanden mit dieser Methode gesehen:

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);
    }
});

Und dann fordern Sie einfach den Fokus auf den editText an:

editText.requestFocus();
Ofir
quelle
5

Die im EditText-Aktionslistener enthaltene Lösung:

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;
        }
    });
    ...
    ...
}
yohm
quelle
3

Ich habe dies gefunden, weil mein EditText bei der Eingabe nicht automatisch entlassen wurde.

Dies war mein ursprünglicher Code.

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;
    }
});

Ich habe es gelöst, indem ich die Linie entfernt habe

return true;

nachdem Sie Dinge getan haben, wenn der Benutzer die Eingabetaste drückt.

Hoffe das hilft jemandem.

Jesaja
quelle
3

Schreiben Sie einfach diese beiden Codezeilen auf, in denen die Eingabeoption funktioniert.

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

Ich habe in den letzten Tagen damit zu kämpfen und eine Lösung gefunden, die wirklich gut funktioniert. Die Softtastatur wird ausgeblendet, wenn eine Berührung außerhalb des EditText ausgeführt wird.

Hier geposteter Code: Standardtastatur beim Klicken in Android ausblenden

Daniel
quelle
2

Oben sehen Sie eine markierte Antwort. Aber ich habe es benutzt getDialog().getCurrentFocus()und gut gearbeitet. Ich "this"poste diese Antwort, weil ich meinen oncreatedialog nicht eingeben kann.

Das ist also meine Antwort. Wenn Sie eine markierte Antwort versucht haben und nicht funktioniert haben, können Sie dies einfach versuchen:

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

Sie können auf einfache Weise eine Singleton-Klasse für den Aufruf erstellen:

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();
                }
            }
        });
    }
}

Also, nachdem kann in der Aktivität wie das nächste Formular aufgerufen werden:

public class MainActivity extends AppCompatActivity {

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

}
Alex Zaraos
quelle
1

Ich benutze diese Methode, um die Tastatur aus dem Bearbeitungstext zu entfernen:

 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);
        }
    }
}

Und diese Methode zum Entfernen der Tastatur aus der Aktivität (funktioniert in einigen Fällen nicht - wenn beispielsweise edittext, an die die Tastatur gebunden ist, den Fokus verliert, funktioniert sie nicht. In anderen Situationen funktioniert sie jedoch hervorragend, und Sie haben sie nicht sich um ein Element zu kümmern, das die Tastatur hält)

 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);
        }
    }
}
Anton Kizema
quelle
1
int klavStat = 1; // for keyboard soft/hide button
int inType;  // to remeber your default keybort Type

editor - ist das EditText-Feld

/// 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);

        }
    }

Wenn Sie ein anderes EditText-Feld haben, müssen Sie auf Fokusänderungen achten

D. Zugo
quelle
Damit Kit-kat sich versteckt, verwende ich Folgendes: `editor.setInputType (InputType.TYPE_NULL); editor.setSingleLine (false); editor.setTextIsSelectable (true); `
D.Dzugo
0

In meinem Fall habe ich, um die Tastatur beim Drücken der "Senden-Taste" auszublenden, die akzeptierte Antwort verwendet, aber den Kontext in getApplication geändert und getWindow () hinzugefügt.

InputMethodManager inputManager = (InputMethodManager) getApplication().getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputManager.hideSoftInputFromWindow(getWindow().getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS);
Leo S.
quelle
-1
editText.setInputType(InputType.TYPE_NULL);
TOLIN THOMAS
quelle
Bitte fügen Sie eine Erklärung hinzu. Ihre Antwort wird derzeit zum Löschen gewählt. Bitte tun Sie dies, um zukünftige Missverständnisse zu vermeiden.
Daniel Cheung
@ daniel-cheung: Ich verstehe diese Art von Kommentar nicht. Ist es nicht aus dem Zusammenhang ersichtlich? Wenn nicht, ist dies nicht der Ort, um den Kontext zu lernen.
Protean
2
Der Grund, warum diese Antwort herabgestimmt / gelöscht werden sollte, ist, dass sie zunächst so aussieht, als würde sie funktionieren, aber dann wird die Tastatur nie wieder angezeigt, sodass es kaum eine richtige Lösung ist.
Protean