Ich frage mich, ob es eine Möglichkeit gibt, mit dem Drücken des Benutzers Enterbeim Eingeben eines EditText
HTML-Ereignisses wie onSubmit umzugehen.
Sie fragen sich auch, ob es eine Möglichkeit gibt, die virtuelle Tastatur so zu manipulieren, dass die Schaltfläche "Fertig" mit etwas anderem gekennzeichnet ist (z. B. "Los") und beim Klicken eine bestimmte Aktion ausführt (wie bei onSubmit).
Antworten:
Ja.
Auch ja.
Sie werden an die aussehen wollen
android:imeActionId
undandroid:imeOptions
Attribute, sowie diesetOnEditorActionListener()
Verfahren, die alle aufTextView
.Verwenden Sie Folgendes, um den Text der Schaltfläche "Fertig" in eine benutzerdefinierte Zeichenfolge zu ändern:
quelle
quelle
enter
in meinen Bearbeitungstext klicke, wird aus irgendeinem Grund der gesamte Bearbeitungstext nach unten verschoben ... Wie kann ich das beheben?Hier ist was du tust. Es ist auch im Beispielcode des Android-Entwicklers 'Bluetooth Chat' versteckt. Ersetzen Sie die fett gedruckten Teile mit der Aufschrift "Beispiel" durch Ihre eigenen Variablen und Methoden.
Importieren Sie zunächst das, was Sie benötigen, in die Hauptaktivität, in der die Eingabetaste etwas Besonderes bewirken soll:
Erstellen Sie nun eine Variable vom Typ TextView.OnEditorActionListener für Ihren Rückgabeschlüssel (hier verwende ich exampleListener ).
Dann müssen Sie dem Hörer zwei Dinge mitteilen, was zu tun ist, wenn die Eingabetaste gedrückt wird. Es muss wissen, um welchen EditText es sich handelt (hier verwende ich exampleView ), und dann muss es wissen, was zu tun ist, wenn die Eingabetaste gedrückt wird (hier example_confirm () ). Wenn dies der letzte oder einzige EditText in Ihrer Aktivität ist, sollte er dasselbe tun wie die onClick-Methode für Ihre Senden-Schaltfläche (oder OK, Bestätigen, Senden, Speichern usw.).
Legen Sie abschließend den Listener fest (höchstwahrscheinlich in Ihrer onCreate-Methode).
quelle
KeyEvent.ACTION_UP
. Damit dies funktioniert, müssen Sie zuerst dasACTION_DOWN
Ereignis konsumieren :if (actionId == EditorInfo.IME_NULL && event.getAction() == KeyEvent.ACTION_DOWN) { return true; }
. Anschließend können Sie nach demACTION_UP
Ereignis suchen und die Aktion ausführen (ähnlich der obigen Antwort). Wenn Sie dasACTION_DOWN
Ereignis nicht nutzen,onEditorAction
wird es nicht aufgerufenACTION_UP
.if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {...}
- konnte keinen der anderen Ansätze zur Arbeit bekommenHardwaretastaturen liefern immer Eingabeereignisse, aber Softwaretastaturen geben in singleLine EditTexts unterschiedliche actionIDs und nulls zurück. Dieser Code reagiert jedes Mal, wenn der Benutzer die Eingabetaste in einem EditText drückt, auf den dieser Listener eingestellt wurde, unabhängig von EditText oder Tastaturtyp.
Die Standardeinstellung der Eingabetaste in singleLine = false ergibt eine gebogene Pfeiltaste. Wenn singleLine = true im letzten EditText, steht auf dem Schlüssel DONE und auf den EditTexts davor NEXT. Standardmäßig ist dieses Verhalten für alle Vanille-, Android- und Google-Emulatoren konsistent. Das scrollHorizontal-Attribut macht keinen Unterschied. Der Null-Test ist wichtig, da die Reaktion von Telefonen auf weiche Eingaben dem Hersteller überlassen bleibt und selbst in den Emulatoren die Vanilla Level 16-Emulatoren auf lange weiche Eingaben in mehrzeiligen und scrollHorizontalen EditTexts mit einer Aktions-ID von NEXT und einer Null für reagieren das Ereignis.
quelle
Diese Seite beschreibt genau, wie das geht.
https://developer.android.com/training/keyboard-input/style.html
Stellen Sie die android: imeOptions ein, dann überprüfen Sie einfach die actionId in onEditorAction. Wenn Sie also imeOptions auf 'actionDone' setzen, suchen Sie in onEditorAction nach 'actionId == EditorInfo.IME_ACTION_DONE'. Stellen Sie außerdem sicher, dass Sie den android: inputType festlegen.
Hier ist der EditText aus dem oben verlinkten Beispiel:
Sie können dies auch programmgesteuert mit der Funktion setImeOptions (int) festlegen . Hier ist der OnEditorActionListener aus dem oben verlinkten Beispiel:
quelle
Ich weiß, dass dies ein Jahr alt ist, aber ich habe gerade entdeckt, dass dies perfekt für einen EditText funktioniert.
Es verhindert alles andere als Text und Leerzeichen. Ich konnte nicht tab, "return" ("\ n") oder irgendetwas.
quelle
Als Ergänzung zu Chad's Antwort (die für mich fast perfekt funktionierte) stellte ich fest, dass ich eine Überprüfung des KeyEvent-Aktionstyps hinzufügen musste, um zu verhindern, dass mein Code zweimal ausgeführt wird (einmal beim Key-Up und einmal beim Key-Down) Veranstaltung).
Unter http://developer.android.com/reference/android/view/KeyEvent.html finden Sie Informationen zum Wiederholen von Aktionsereignissen (Halten der Eingabetaste) usw.
quelle
Ich hatte einen ähnlichen Zweck. Ich wollte das Drücken der Eingabetaste auf der Tastatur (die ich anpassen wollte) in einer AutoCompleteTextView lösen, die TextView erweitert. Ich habe verschiedene Lösungen von oben ausprobiert und sie schienen zu funktionieren. ABER ich hatte einige Probleme, als ich den Eingabetyp auf meinem Gerät (Nexus 4 mit AOKP ROM) von SwiftKey 3 (wo es perfekt funktionierte) auf die Standard-Android-Tastatur umstellte (wo anstatt meinen Code vom Listener zu verarbeiten, eine neue Zeile war Eingabe nach Drücken der Eingabetaste. Es hat eine Weile gedauert, bis ich dieses Problem behoben habe, aber ich weiß nicht, ob es unter allen Umständen funktioniert, unabhängig davon, welchen Eingabetyp Sie verwenden.
Also hier ist meine Lösung:
Setzen Sie das Eingabetypattribut der Textansicht in der XML auf "Text":
Passen Sie die Beschriftung der Eingabetaste auf der Tastatur an:
Setzen Sie einen OnEditorActionListener auf die Textansicht:
Ich hoffe, das kann anderen helfen, die Probleme zu vermeiden, die ich hatte, weil sie mich fast verrückt gemacht haben.
quelle
Fügen Sie in Ihrer XML das Attribut imeOptions zum editText hinzu
Fügen Sie dann in Ihrem Java-Code den OnEditorActionListener demselben EditText hinzu
Hier ist die Erklärung: ImeOptions = actionDone weist dem EnterKey "actionDone" zu. Der EnterKey auf der Tastatur ändert sich von "Enter" zu "Done". Wenn Sie also die Eingabetaste drücken, wird diese Aktion ausgelöst, und Sie werden damit umgehen.
quelle
Sie können es auch tun ..
quelle
enter
in meinen Bearbeitungstext klicke, wird aus irgendeinem Grund der gesamte Bearbeitungstext nach unten verschoben ... Wie kann ich das beheben?Funktioniert sehr gut für mich.
Außerdem Tastatur ausblenden
quelle
Zuerst müssen Sie EditText einstellen, um den Tastendruck anzuhören
Zweitens definieren Sie das Ereignis beim Drücken der Taste, z. B. Ereignis, um den Text von TextView festzulegen:
Und vergessen Sie nicht, oben EditText, TextView, OnKeyListener, KeyEvent zu importieren:
quelle
perfekt funktionieren
}}
perfekt funktionieren
quelle
Xml
quelle
Das sollte funktionieren
quelle
Geben Sie diesen Code in Ihren Editor ein, damit er die erforderlichen Module importieren kann.
quelle
Dies funktioniert gut auf LG Android-Handys. Es verhindert, dass
ENTER
andere Sonderzeichen als normale Zeichen interpretiert werden.Next
DieDone
Schaltfläche oder wird automatisch angezeigt undENTER
funktioniert wie erwartet.quelle
Hier ist eine einfache statische Funktion, die Sie in Ihre
Utils
oder IhreKeyboards
Klasse einfügen können und die Code ausführt, wenn der Benutzer die Eingabetaste auf einer Hardware- oder Softwaretastatur drückt. Es ist eine modifizierte Version von @ earlcasper's ausgezeichneter Antwortquelle
InputType im Textfeld muss so sein
text
, dass das, was CommonsWare gesagt hat, funktioniert. Ich habe gerade alles versucht, kein inputType vor dem Test und nichts hat funktioniert. Enter hat sich weiterhin als Soft Enter registriert. DanachinputType = text
funktionierte alles einschließlich des setImeLabel.Beispiel:
android:inputType="text"
quelle
quelle
Eine zuverlässige Möglichkeit, auf eine <Eingabe> in einem EditText zu antworten, besteht in einem TextWatcher , einem LocalBroadcastManager und einem BroadcastReceiver . Sie müssen die v4-Unterstützungsbibliothek hinzufügen , um den LocalBroadcastManager verwenden zu können. Ich verwende das Tutorial auf vogella.com : 7.3 "Lokale Broadcast-Ereignisse mit LocalBroadcastManager" aufgrund des vollständigen, prägnanten Codebeispiels. In onTextChanged before ist der Index des Endes der Änderung vor der Änderung >; minus Start. Wenn der UI-Thread im TextWatcher gerade damit beschäftigt ist, den bearbeitbaren Text von editText zu aktualisieren, senden wir eine Absicht, den BroadcastReceiver zu aktivieren, wenn der UI-Thread die Aktualisierung von editText abgeschlossen hat.
quelle
android:inputType="textCapSentences"
) verwenden, werden Wagenrückläufe aus der Eingabe herausgefiltert, sodass onTextChanged () nicht aufgerufen wird, wenn der Benutzer die Eingabetaste drückt.Diese Frage wurde mit Butterknife noch nicht beantwortet
LAYOUT XML
JAVA APP
quelle
Mit Kotlin habe ich eine Funktion erstellt, die alle Arten von "erledigten" Aktionen für EditText verarbeitet, einschließlich der Tastatur. Sie können sie ändern und auch andere Tasten nach Ihren Wünschen verarbeiten:
Beispielverwendung:
Ich denke, dass das Ändern des Etiketts von der Tastatur-App abhängt und dass es sich normalerweise nur im Querformat ändert, wie hier geschrieben . Wie auch immer, Beispielverwendung dafür:
Oder wenn Sie in XML wollen:
Und das Ergebnis (im Querformat dargestellt):
quelle
Fügen Sie diese abhängig hinzu, und es sollte funktionieren:
quelle
Dies gibt Ihnen eine aufrufbare Funktion, wenn der Benutzer die Eingabetaste drückt.
Verwendungszweck
quelle