Wie erstelle ich eine Android EditView-Schaltfläche "Fertig" und verstecke die Tastatur, wenn ich darauf klicke?

115

Wenn der Benutzer auf klickt EditView, öffnet Android die Tastatur, damit der Benutzer in das schreiben kann EditView.

Das Problem ist, wenn der Benutzer mit dem Schreiben fertig ist, gibt es keine Möglichkeit, die Tastatur auszublenden. Der Benutzer muss die Zurück-Taste drücken, um die Tastatur auszublenden.

Gibt es eine Möglichkeit, eine DoneSchaltfläche auf der Tastatur anzuzeigen, die die Tastatur ausblendet?

D-Mann
quelle

Antworten:

139

Verwenden Sie TextView.setImeOptions und übergeben Sie es actionDone. mögentextView.setImeOptions(EditorInfo.IME_ACTION_DONE);

dmazzoni
quelle
8
textView.setImeOptions(EditorInfo.IME_ACTION_DONE);
Sulai
14
Ich musste hinzufügen textView.singleLine(true), damit dies programmgesteuert funktioniert.
Jacksonkr
aber dies ist veraltet seit Android 2.3
Sumit Kumar Saha
148

Zuerst müssen Sie das android:imeOptionsAttribut actionDonefür Ihren Ziel-EditText wie unten gezeigt festlegen. Dadurch wird Ihre Schaltfläche "RETURN" in der Softtastatur Ihres EditText in eine Schaltfläche "DONE" geändert.

<EditText 
    android:id="@+id/edittext_done"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:hint="Enter some text"
    android:imeOptions="actionDone"
    />
Paresh Mayani
quelle
@ Michael hat diesen Link entfernt. Vielen Dank
Paresh Mayani
19
Ich musste hinzufügen android:singleLine="true", damit dies über XML
funktioniert
4
android: singleLine ist veraltet. Verwenden Sie android: maxLines = "1".
FariborZ
Ja, @FariborZ singleLine ist jetzt veraltet.
Paresh Mayani
1
Wichtiger Hinweis: singleLine ist nicht dasselbe wie maxLines. Dieses Missverständnis verursacht viele Probleme für alle, das müssen wir überall beachten. stackoverflow.com/questions/30879471/…
milosmns
86

Schließen Sie beide ein imeOptions und singleLine :

<EditText 
   android:id="@+id/edittext_done"
   android:layout_width="fill_parent"
   android:layout_height="wrap_content"
   android:imeOptions="actionDone"
   android:singleLine="true"
   />
Oded Breiner
quelle
35
android:imeActionLabel="Done" 
android:singleLine="true"

In der XML-Datei funktioniert gut. Dies führt aber auch dazu editText, dass Sie weiterhin eine einzelne Zeile eingeben, die Sie möglicherweise nicht möchten. Wenn Sie also Ihrem Code Folgendes hinzufügen, wird sichergestellt, dass Sie nicht alles in einer einzigen Zeile eingeben.

mainText.setHorizontallyScrolling(false);
mainText.setMaxLines("Maximum integer value that you want to provide");
Santosh Pillai
quelle
1
Danke, Demo war am 12, die Zeit war 11:58 und Sie haben mein Problem am 11:59 behoben: p
shahzain ali
android: singleLine = "true" ist veraltet. Also benutze android: lines = "1"
Gowtham. R
20

Um den fertigen Button zu bekommen

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);

und

android:inputType="text" in der xml

Zur Handhabung auf fertig über die Tastatur geklickt

    editText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event){
            if(actionId == EditorInfo.IME_ACTION_DONE){
                // Your action on done
                return true;
            }
            return false;
        }
    });

`

Shangeeth Sivan
quelle
14

Benutze das:

android:singleLine="true"
Frank Nguyen
quelle
Ja ... wie kann man sonst unterscheiden, ob man in die nächste Zeile geht oder die Tastatur schließt?
jstewart379
Das ist es, was für mich funktioniert hat. Ich habe mich entschlossen, Fehler zu machen actionDone, nur für den Fall, dass einige Geräte anders reagieren.
Jacksonkr
10

Verwenden Sie diese beiden Zeilen für Ihre EditText

android:imeActionLabel="Done"
android:singleLine="true"

oder Sie können es programmgesteuert durch diese Zeile erreichen.

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
NarenderNishad
quelle
7

Wenn sich die Eigenschaft für das Widget nicht ändert, ist es möglicherweise besser, sie wie android:imeOptions="actionDone"in der Layoutdatei zu xmlverwenden.

Tom
quelle
6

Verwenden:

android:imeActionLabel="Done"
android:singleLine="true" 
Kiran Mahale
quelle
5

Für den Code:

editText.setImeOptions(EditorInfo.IME_ACTION_DONE);
Steven.Nguyen
quelle
5

ActionDone wird verwendet, wenn Sie auf die nächste Schaltfläche in der Tastatur klicken, wenn die Tastatur ausgeblendet ist. Verwenden Sie in Text bearbeiten oder AppcompatEdit

XML

1.1 Wenn Sie AppCompatEdittext verwenden

    <android.support.v7.widget.AppCompatEditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

1.2 Wenn Sie Edittext verwenden

    <EditText
    android:id="@+id/edittext"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionDone"/>

JAVA

EditText edittext= (EditText) findViewById(R.id.edittext);
edittext.setImeOptions(EditorInfo.IME_ACTION_DONE);
Raj
quelle
5

Ich muss darauf hinweisen, dass viele Menschen sich darum bemühen können, ohne das Problem zu kennen.

Wenn Sie möchten, dass die KB beim Klicken ausgeblendet wird Doneund Sie android:imeOptions="actionDone"& android:maxLines="1" ohne Ihren EditText festlegen inputType, funktioniert dies NICHT , da die Standardeinstellung inputTypefür den EditText nicht "text"so ist, wie viele Leute denken.

so, nur Einstellung inputTypewird Ihnen die Ergebnisse , die Sie wünschen , was auch immer , was Sie es mögen setzen "text", "number"... etc.

Muhammed Refaat
quelle
2

Tatsächlich können Sie benutzerdefinierten Text für diese kleine blaue Schaltfläche festlegen. In der XML-Datei verwenden Sie einfach

android:imeActionLabel="whatever"

auf Ihrem EditText.

Oder in der Java-Datei verwenden

etEditText.setImeActionLabel("whatever", EditorInfo.IME_ACTION_DONE);

Ich wähle willkürlich IME_ACTION_DONE als Beispiel dafür, was im zweiten Parameter für diese Funktion stehen soll. Eine vollständige Liste dieser Aktionen finden Sie hier .

Es ist zu beachten, dass dadurch nicht auf allen Tastaturen aller Geräte Text angezeigt wird. Einige Tastaturen unterstützen keinen Text auf dieser Schaltfläche (z. B. Swiftkey). Und einige Geräte unterstützen es auch nicht. Eine gute Regel ist, wenn Sie bereits Text auf der Schaltfläche sehen, wird dieser in den gewünschten Text geändert.

Zar E Ahmer
quelle
2

Kotlin-Lösung

Der direkte Weg, um die Tastatur ausblenden + Aktion in Kotlin ausführen, ist:

// Set action
edittext.setOnEditorActionListener { _, actionId, _ ->
    if (actionId == EditorInfo.IME_ACTION_DONE) {
        // Hide Keyboard
        val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
        inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
        true
    }
    false
}

Kotlin-Erweiterung

Verwenden Sie diese Option, um edittext.onDone {/*action*/}Ihren Hauptcode aufzurufen . Hält es lesbarer und wartbarer

edittext.onDone { edittext.hideKeyboard() }

fun View.hideKeyboard() {
    val inputMethodManager = context.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager
    inputMethodManager.hideSoftInputFromWindow(windowToken, 0)
}

fun EditText.onDone(callback: () -> Unit) {
    // These lines optional if you don't want to set in Xml
    imeOptions = EditorInfo.IME_ACTION_DONE
    maxLines = 1
    setOnEditorActionListener { _, actionId, _ ->
        if (actionId == EditorInfo.IME_ACTION_DONE) {
            callback.invoke()
            true
        }
        false
    }
}

Zusätzliche Tastaturerweiterungen

Wenn Sie weitere Möglichkeiten zur Vereinfachung der Arbeit mit der Tastatur wünschen (Anzeigen, Schließen, Fokussieren): Lesen Sie diesen Beitrag

Vergessen Sie nicht, diese Optionen zu Ihrer edittext-XML hinzuzufügen, wenn sie nicht im Code enthalten sind

<EditText ...
    android:imeOptions="actionDone"
    android:inputType="text"/>

Benötigen Sie inputType="textMultiLine"Unterstützung? Lesen Sie diesen Beitrag und fügen Sie nicht imeOptionsoder inputTypein XML

Gibolt
quelle
0

Verwenden Sie dies aus Ihrer Sicht

<EditText 
    ....
    ....
    android:imeOptions="actionDone" 
    android:id="@+id/edtName"
    />
Marium Jawed
quelle
0

Wenn Sie verwenden

android:imeOptions="actionDone" 

dann musst du verwenden

android:inputType="text"

Dann können nur Sie die Schaltfläche Aktion erledigt auf der Tastatur sehen.

Aditya Patil
quelle
0

Wenn Sie überhaupt keine Schaltfläche möchten (z. B. entwickeln Sie eine grafische Benutzeroberfläche für Blinde, bei der das Tippen nicht positioniert werden kann und Sie sich auf einfache / doppelte / lange Tippen verlassen):

text.setItemOptions(EditorInfo.IME_ACTION_NONE)

Oder in Kotlin:

text.imeOptions = EditorInfo.IME_ACTION_NONE
albaspazio
quelle