375 Stimmen

Android: Softkeyboard automatisch anzeigen, wenn der Fokus auf einem EditText liegt

Ich zeige ein Eingabefeld mit AlertDialog . Die EditText innerhalb des Dialogs selbst wird automatisch fokussiert, wenn ich die AlertDialog.show() aber die Soft-Tastatur wird nicht automatisch angezeigt.

Wie kann ich erreichen, dass die Soft-Tastatur automatisch angezeigt wird, wenn der Dialog angezeigt wird? (und es gibt keine physische/Hardware-Tastatur). Ähnlich wie beim Drücken der Schaltfläche "Suchen", um die globale Suche aufzurufen, wird die Softtastatur automatisch angezeigt.

7voto

jqpubliq Punkte 11796

Werfen Sie einen Blick auf diese Diskussion, die das manuelle Ein- und Ausblenden des IME behandelt. Ich habe jedoch das Gefühl, dass, wenn eine gezielte EditText nicht die IME aufruft, sondern weil Sie die AlertDialog.show() en su OnCreate() oder eine andere Methode, die aufgerufen wird, bevor der Bildschirm tatsächlich angezeigt wird. Verschieben nach OnPostResume() sollte das Problem in diesem Fall beheben, glaube ich.

6voto

Sachin Surjan Punkte 169

Ja, das können Sie mit setOnFocusChangeListener es wird Ihnen helfen.

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        if (hasFocus) {
            dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }
});

4voto

Rondev Punkte 690

Meine Methode verwendet den neuen Weg für Android 11+ und unterstützt auch ältere Versionen:

fun Fragment.showKeyboard() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
        ViewCompat.getWindowInsetsController(requireView())?.show(WindowInsetsCompat.Type.ime())
    } else {
        val focusedView = view?.findFocus() ?: view?.apply { requestFocus() }
        val imm = (context?.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)
        val isShowSucceeded = imm.showSoftInput(focusedView, InputMethodManager.SHOW_IMPLICIT)
        if(!isShowSucceeded) {
            imm.toggleSoftInputFromWindow(
                view?.windowToken, 0, InputMethodManager.HIDE_IMPLICIT_ONLY)
    }
}

}

4voto

Ryan Wittenburg Punkte 41

Falls jemand etwas bekommt:

Es kann kein statischer Verweis auf die nicht statische Methode getSystemService(String) vom Typ Activity erstellt werden

Versuchen Sie, Folgendes hinzuzufügen Kontext zum Aufruf von getSystemService.

Also

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

2voto

Allan Veloso Punkte 4976

Das Problem scheint zu sein, dass, da der Ort, wo Sie Text eingeben, zunächst ausgeblendet ist (oder verschachtelt oder etwas), AlertDialog automatisch das Flag setzen wird WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM o WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE damit die Dinge nicht einen Soft-Input auslösen, der angezeigt wird.

Um dies zu beheben, müssen Sie Folgendes hinzufügen:

(...)
// Create the dialog and show it
Dialog dialog = builder.create()
dialog.show();

// After show (this is important specially if you have a list, a pager or other view that uses a adapter), clear the flags and set the soft input mode
dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE|WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

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