Ist es möglich, ein EditText
Widget mit android:inputType="textMultiLine"
set zu haben und android:imeOptions="actionDone"
gleichzeitig?
Ich möchte ein mehrzeiliges Bearbeitungsfeld, bei dem die Aktionstaste auf der Tastatur fertig ist und nicht die Eingabetaste (Wagenrücklauf), aber es scheint nicht zu funktionieren.
Danke im Voraus
Antworten:
Verwenden
und in XML:
quelle
textField.setCursorVisible(false);
onEditorActionListener
Aus der Android-Dokumentation: ' "textMultiLine" Normale Texttastatur, mit der Benutzer lange Textzeichenfolgen eingeben können, die Zeilenumbrüche enthalten (Zeilenumbrüche) . 'Daher ist das textMultiLine-Attribut nicht geeignet, wenn Sie die Schaltfläche' Fertig 'auf der Tastatur haben möchten.
Eine einfache Möglichkeit, ein mehrzeiliges (in diesem Fall 3 Zeilen) Eingabefeld mit der Schaltfläche "Fertig" abzurufen, ist die Verwendung von "EditText" mit
Aus irgendeinem Grund funktioniert dies jedoch nur, wenn ich diese Einstellungen im Code anstelle der Layoutdatei (in onCreate) von vornehme
Ich hoffe, das hilft jemandem, da es eine Weile gedauert hat, es herauszufinden. Wenn Sie einen Weg finden, es aus dem Manifest heraus zum Laufen zu bringen, lassen Sie es uns bitte wissen.
quelle
maxLines()
anstattsetLines()
zu vermeiden, die Höhe desEditText
setMaxLines(3)
) Vielen Dank!Arbeitsbeispiel! Erstellen Sie die folgende benutzerdefinierte EditText-Klasse, die diese Funktion unterstützt, und verwenden Sie die Klasse in der XML-Datei. Arbeitscode:
quelle
Um dies in Kotlin zu tun (und optional auch andere Konfigurationen anzuwenden, wie
textCapSentences
Sie diese Erweiterungsfunktion verwenden können:Verwendung:
quelle
setRawInputType
anstelle vonsetInputType
Ich denke, das ist der Weg, um dich zu machen. Wenn Sie haben
android:inputType="textMultiLine"
,android:imeOptions="actionDone"
wird die Funktionalität der Eingabetaste nicht eindeutig. Denken Sie daran, dass Sie verwendenandroid:lines="10"
und möglicherweise entfernen könnenandroid:inputType="textMultiLine"
, aber es hängt davon ab, was Sie erreichen möchten. Manchmal benötigen Sie nur dasandroid:inputType="textMultiLine"
und es gibt keinen Ersatz dafür.quelle
Das scheint für mich perfekt zu funktionieren
quelle
Wiederverwendbare Kotlin-Lösung
Das Festlegen dieser Werte im Code war das einzige, was für mich funktioniert hat
Ich benötige dies häufig, um den Code sauber zu halten:
Wenn Sie eine optionale benutzerdefinierte Aktion für "Fertig" hinzufügen möchten, versuchen Sie Folgendes:
Fügen Sie dann einen
hideKeyboard()
Anruf hinzuEditText.multilineDone
quelle
Kurze Antwort: Nein, ich glaube, es ist vor API Level 11 (3.0) nicht möglich.
Das gleiche Problem tauchte hier auf (in den Kommentaren zur akzeptierten Antwort besprochen):
Android Soft Tastatur Aktionstaste
Aus dem letzten Kommentar:
quelle
Ein einfacher Weg, um diese Situation zu umgehen:
Behalten Sie diese Attribute im EditText bei:
Fügen Sie dann diesen Code hinzu, um die Tastatur nur auszublenden, wenn Sie die EINGABETASTE drücken:
quelle
Wenn es nicht um das Aussehen der Bildschirmtastatur geht, können Sie einfach einen Eingabe-Listener auf die Tastatur setzen und den Status "erledigt" auslösen, wenn der Benutzer eine neue Zeile eingibt.
quelle
Wenn Sie die Eingabeoption textImeMultiline mit den Imeoptionen flagnext und actionnext verwenden, erhalten Sie anstelle der Cariage-Rückgabe eine nächste Schaltfläche
quelle
Während keine der anderen Lösungen jemals für mich funktioniert hat, hat die folgende wunderbar funktioniert und mir Tage und Tage mehr Googeln erspart, natürlich mit ein paar eigenen Wendungen. Leider kann ich mich nicht erinnern, woher ich den Code genau habe, und kann dem Autor daher nicht die Anerkennung geben, die er verdient.
In Ihrem Java-Code:
quelle
Ich bin auf 4.x und habe versucht, setHorizontallyScrolling () (mit oder ohne setLine () oder setMaxLines ()) sowie viele verschiedene XML-Konfigurationen aufzurufen, damit die Schaltfläche Fertig angezeigt wird. Keiner von ihnen hat funktioniert. Die Quintessenz ist, dass Android, wenn Ihr EditText mehrzeilig ist, immer den Wagenrücklauf anstelle der Schaltfläche "Fertig" anzeigen möchte, es sei denn, Sie haben einen Hack dazu durchgeführt.
Die Lösung mit der geringsten Komplikation, bei der ich festgestellt habe, dass das Verhalten des Wagenrücklaufs nicht neu zugeordnet werden muss, ist hier: https://stackoverflow.com/a/12570003/3268329 . Diese Lösung macht den unerbittlichen Wunsch von Android zunichte, das Setzen des IME_FLAG_NO_ENTER_ACTION-Flags für mehrzeilige Ansichten zu erzwingen, wodurch die Schaltfläche "Fertig" verschwindet.
quelle
Ich hatte auch einige Zeit Probleme, aber ich fand endlich eine Lösung!
Erstellen Sie einfach eine benutzerdefinierte EditText-Klasse als solche:
Diese Klasse entfernt lineBreaks (\ n), umschließt den Text wie textMultiline und ermöglicht es Ihnen, die Eingabetaste durch eine ImeAction zu ersetzen;).
Sie müssen es nur in Ihrem XML anstelle der klassischen EditText-Klasse aufrufen.
Um die Logik hier zu erklären:
quelle
Hier finden Sie eine funktionierende Lösung: Erstellen Sie Ihre benutzerdefinierte EditTextView (erweitern Sie einfach eine Textansicht) und überschreiben Sie onInputConnection mit einem Code, den Sie in der akzeptierten Antwort hier finden: Mehrzeiliger EditText mit fertigem SoftInput-Aktionsetikett auf 2.3
quelle