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.

319voto

Randy Sugianto 'Yuku' Punkte 67957

Sie können einen Fokus-Listener für die EditText über die AlertDialog , dann erhalten Sie die AlertDialog 's Window . Von dort aus können Sie die Soft-Tastatur anzeigen lassen, indem Sie setSoftInputMode .

final AlertDialog dialog = ...;

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

258voto

horkavlna Punkte 2992

Zur Anzeige der Verwendung der Tastatur:

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

Zum Verstecken der Tastatur:

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

117voto

Bao Le Punkte 14832

Sie können direkt nach dem Erstellen des Dialogs eine Soft-Tastatur anfordern (Test mit SDK - r20)

// create dialog
final AlertDialog dialog = ...; 

// request keyboard   
dialog.getWindow().setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

26voto

Jurie Otto Punkte 361

Ich habe dieses Beispiel gefunden http://Android-codes-examples.blogspot.com/2011/11/show-or-hide-soft-keyboard-on-opening.html . Fügen Sie den folgenden Code kurz vor alert.show() .

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

25voto

tidbeck Punkte 2293

Ich hatte das gleiche Problem und habe es mit dem folgenden Code gelöst. Ich bin nicht sicher, wie es sich auf einem Telefon mit Hardware-Tastatur verhalten wird.

// TextEdit
final EditText textEdit = new EditText(this);

// Builder
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setTitle("Enter text");
alert.setView(textEdit);

alert.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        String text = textEdit.getText().toString();
        finish();
    }
});

alert.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
        finish();
    }
});

// Dialog
AlertDialog dialog = alert.create();
dialog.setOnShowListener(new OnShowListener() {

    @Override
    public void onShow(DialogInterface dialog) {
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(textEdit, InputMethodManager.SHOW_IMPLICIT);
    }
});

dialog.show();

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