Android: Software-Tastatur automatisch anzeigen, wenn der Fokus auf einem EditText liegt

Lesezeit: 8 Minuten

Android Software Tastatur automatisch anzeigen wenn der Fokus auf einem
Randy Sugianto ‘Yuku’

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

Wie lasse ich die Soft-Tastatur automatisch anzeigen, wenn der Dialog angezeigt wird? (und es gibt keine physische/Hardware-Tastatur). Ähnlich wie beim Drücken der Suchtaste zum Aufrufen der globalen Suche wird die Soft-Tastatur automatisch angezeigt.

  • Dies sollte gemäß Teds Kommentar unten automatisch geschehen. Überprüfen Sie das zuerst!

    – Cheezmeister

    8. August 2012 um 18:26 Uhr

  • Diese Antwort ist am einfachsten und funktioniert gut: stackoverflow.com/a/8018630/89818

    – kräh

    19. Januar 2015 um 0:46 Uhr

  • Überprüfen Sie diesen Link, er funktioniert bei mir

    – Yogesh Rathi

    30. März 2016 um 11:08 Uhr

  • Ich bin im Laufe der Jahre mehrmals auf diese Antwort zurückgekommen. Es ist immer innerhalb eines Dialogs, dass ich dieses Problem habe, niemals Fragment oder Activity.

    – tir38

    28. Mai 2016 um 3:55 Uhr

  • Mögliches Duplikat von Close/hide the Android Soft Keyboard

    – Md. Imran Choudhury

    26. Februar 2017 um 9:59 Uhr

Sie können einen Fokus-Listener auf dem erstellen EditText auf der AlertDialogdann nimm die AlertDialog‘S Window. Von dort aus können Sie die Soft-Tastatur anzeigen lassen, indem Sie anrufen 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);
        }
    }
});

  • Wie würde ich es mit dem AlertDialog.Builder machen? …final AlertDialog.Builder alert = new AlertDialog.Builder(Main.this);

    – Stefan

    25. Januar 2011 um 18:02 Uhr


  • @Stephen Sie können den Dialog vom Builder abrufen, indem Sie verwenden final AlertDialog dialog = builder.create() und dann showim Dialogfeld anstelle des Builders.

    – tidbeck

    11. Oktober 2011 um 9:38 Uhr

  • ICH ZIEHE MEINEN KOMMENTAR OBEN ZURÜCK Ich habe herausgefunden, dass Sie sich Ihr XML ansehen sollten, wenn Sie den Fokus nicht richtig hinbekommen! Wenn Sie das Etikett sehen drin – entfernen. Es scheint, als würde das Tag EditText den Fokus geben, und dann wird Ihr Listener nicht gefeuert, da EditText bereits den Fokus hat.

    –Ted

    20. Oktober 2011 um 13:09 Uhr

  • Wie machen Sie das nicht, wenn das Gerät eine Hardware-Tastatur hat? Scheint, als wäre dies für diese Benutzer ärgerlich.

    – mxkl

    8. März 2012 um 17:23 Uhr

  • Ich verstehe wirklich nicht, warum dies nicht das Standardverhalten im SDK ist. Wenn eine Ansicht, die eine Texteingabe erfordert, einen blinkenden Cursor anzeigt, warum sollte jemand die Tastatur nicht sehen wollen, um Text einzugeben? Es fühlt sich für mich so falsch von einer UX an

    – Christian Garcia

    30. April 2016 um 9:44 Uhr

Zum Anzeigen der Tastaturbenutzung:

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

Zum Ausblenden der Tastaturnutzung:

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

  • Dies funktioniert besonders gut, wenn Sie die Soft-Tastatur basierend auf dem Umschalten der Sichtbarkeit einer Ansicht in Ihrem Layout zwischen SICHTBAR und GEGANGEN ein-/ausblenden möchten.

    – PacificSky

    5. Juli 2012 um 18:47 Uhr

  • Ich würde vorschlagen, stattdessen das SHOW_IMPLICIT-Flag zu verwenden, da dies bedeutet, dass das Ändern der Aktivität oder Anwendung die Tastatur wie erwartet automatisch ausblendet.

    – Cassie

    10. April 2013 um 1:28 Uhr

  • @drspaceboo Die Verwendung von SHOW_IMPLICIT funktioniert bei mir überhaupt nicht, ich muss SHOW_FORCED verwenden, nicht sicher warum …

    – Yoann Hercouet

    26. April 2014 um 14:27 Uhr

  • Wann sollte der obige Code ausgeführt werden? Ich habe es versucht, kurz nachdem ich mein Layout zu seinem übergeordneten Element hinzugefügt hatte. Das hat nicht funktioniert. Aber wenn ich es gemacht habe, nachdem das Layout schon eine Weile da war, hat es funktioniert. Gibt es also einen Rückruf, der mir sagt: “Wenn Sie jetzt versuchen, die Tastatur anzuzeigen, funktioniert sie tatsächlich”?

    – Wilhelm Jockusch

    19. Januar 2015 um 21:26 Uhr


  • toggleSoftInput(InputMethodManager.SHOW_FORCED,0) schaltet die Soft-Tastatur um. Wenn Sie sicherstellen möchten, dass die Tastatur angezeigt wird, können Sie stattdessen imm.showSoftInput( view, InputMethodManager.SHOW_IMPLICIT ) verwenden, wobei view die Ansicht ist, die die Eingabe erhält.

    – PJ_Finnegan

    21. Mai 2015 um 12:38 Uhr


Android Software Tastatur automatisch anzeigen wenn der Fokus auf einem
Bao Le

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

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

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

  • Für alle, die sich fragen, öffnet diese Methode die Softwaretastatur nicht, wenn eine Hardwaretastatur angeschlossen ist. Ich habe gerade mit einem USB-On-The-Go-Kabel getestet. Perfekt!

    – 13rac1

    27. Januar 2016 um 18:25 Uhr

  • Das bringt mir nichts.

    – JohnyTex

    24. März 2016 um 11:02 Uhr

  • Ich habe keine Hardware-Tastatur. Vielleicht Konfiguration (?)

    – JohnyTex

    24. März 2016 um 11:11 Uhr

1646323991 839 Android Software Tastatur automatisch anzeigen wenn der Fokus auf einem
Jurie Otto

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 direkt davor hinzu alert.show().

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

Ich hatte das gleiche Problem und habe es mit folgendem Code gelöst. Ich bin mir 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();

  • Es ist in Dialogklasse API-Level 8.

    – tidbeck

    21. Oktober 2011 um 14:19 Uhr

  • muss später entfernt worden sein :/

    – Jacek Kwiecień

    12. Januar 2012 um 20:40 Uhr

  • @Xylian es ist immer noch in der Dokumentation Dialog.setOnShowListener()

    – tidbeck

    13. Januar 2012 um 0:32 Uhr

Android Software Tastatur automatisch anzeigen wenn der Fokus auf einem
ahtartam

<activity
    ...
    android:windowSoftInputMode="stateVisible" >
</activity>

oder

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

  • Es ist in Dialogklasse API-Level 8.

    – tidbeck

    21. Oktober 2011 um 14:19 Uhr

  • muss später entfernt worden sein :/

    – Jacek Kwiecień

    12. Januar 2012 um 20:40 Uhr

  • @Xylian es ist immer noch in der Dokumentation Dialog.setOnShowListener()

    – tidbeck

    13. Januar 2012 um 0:32 Uhr

Codeausschnitte aus anderen Antworten funktionieren, aber es ist nicht immer offensichtlich, wo sie im Code platziert werden müssen, insbesondere wenn Sie eine verwenden AlertDialog.Builder und folgte dem Offizielles Dialog-Tutorial weil es nicht verwendet final AlertDialog ... oder alertDialog.show().

alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

Ist vorzuziehen

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

Weil SOFT_INPUT_STATE_ALWAYS_VISIBLE die Tastatur ausblendet, wenn der Fokus von EditText weg wechselt, wobei SHOW_FORCED die Tastatur angezeigt hält, bis sie explizit geschlossen wird, selbst wenn der Benutzer zum Startbildschirm zurückkehrt oder die letzten Apps anzeigt.

Unten ist Arbeitscode für einen AlertDialog, der mit einem benutzerdefinierten Layout mit einem in XML definierten EditText erstellt wurde. Es legt auch fest, dass die Tastatur eine “Go”-Taste hat und ermöglicht es ihr, die positive Taste auszulösen.

alert_dialog.xml:

<RelativeLayout
android:id="@+id/dialogRelativeLayout"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content" >

    <!-- android:imeOptions="actionGo" sets the keyboard to have a "go" key instead of a "new line" key. -->
    <!-- android:inputType="textUri" disables spell check in the EditText and changes the "go" key from a check mark to an arrow. -->
    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginLeft="4dp"
        android:layout_marginRight="4dp"
        android:layout_marginBottom="16dp"
        android:imeOptions="actionGo"
        android:inputType="textUri"/>

</RelativeLayout>

AlertDialog.java:

import android.app.Activity;
import android.app.Dialog;
import android.content.DialogInterface;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.DialogFragment;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatDialogFragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;

public class CreateDialog extends AppCompatDialogFragment {
    // The public interface is used to send information back to the activity that called CreateDialog.
    public interface CreateDialogListener {
        void onCreateDialogCancel(DialogFragment dialog);    
        void onCreateDialogOK(DialogFragment dialog);
    }

    CreateDialogListener mListener;

    // Check to make sure that the activity that called CreateDialog implements both listeners.
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        try {
            mListener = (CreateDialogListener) activity;
        } catch (ClassCastException e) {
            throw new ClassCastException(activity.toString() + " must implement CreateDialogListener.");
        }
    }

    // onCreateDialog requires @NonNull.
    @Override
    @NonNull
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(getActivity());
        LayoutInflater customDialogInflater = getActivity().getLayoutInflater();

        // Setup dialogBuilder.
        alertDialogBuilder.setTitle(R.string.title);
        alertDialogBuilder.setView(customDialogInflater.inflate(R.layout.alert_dialog, null));
        alertDialogBuilder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                mListener.onCreateDialogCancel(CreateDialog.this);
            }
        });
        alertDialogBuilder.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                mListener.onCreateDialogOK(CreateDialog.this);
            }
        });

        // Assign the resulting built dialog to an AlertDialog.
        final AlertDialog alertDialog = alertDialogBuilder.create();

        // Show the keyboard when the dialog is displayed on the screen.
        alertDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);

        // We need to show alertDialog before we can setOnKeyListener below.
        alertDialog.show();

        EditText editText = (EditText) alertDialog.findViewById(R.id.editText);

        // Allow the "enter" key on the keyboard to execute "OK".
        editText.setOnKeyListener(new View.OnKeyListener() {
            public boolean onKey(View v, int keyCode, KeyEvent event) {
                // If the event is a key-down event on the "enter" button, select the PositiveButton "OK".
                if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
                    // Trigger the create listener.
                    mListener.onCreateDialogOK(CreateDialog.this);

                    // Manually dismiss alertDialog.
                    alertDialog.dismiss();

                    // Consume the event.
                    return true;
                } else {
                    // If any other key was pressed, do not consume the event.
                    return false;
                }
            }
        });

        // onCreateDialog requires the return of an AlertDialog.
        return alertDialog;
    }
}

925130cookie-checkAndroid: Software-Tastatur automatisch anzeigen, wenn der Fokus auf einem EditText liegt

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy