[Android] Mehrzeiliger EditText mit Fertig Aktionstaste


Answers

Aus der Android-Dokumentation: ' "textMultiLine" Normale Texttastatur, mit der Benutzer lange Textzeichenfolgen eingeben können, die Zeilenumbrüche enthalten (Zeilenumbrüche) . 'Daher ist das Attribut textMultiLine nicht geeignet, wenn Sie die Schaltfläche' Fertig 'auf der Tastatur verwenden möchten.

Eine einfache Möglichkeit, ein mehrzeiliges (in diesem Fall 3 Zeilen) Eingabefeld mit der Schaltfläche done zu erhalten, ist die Verwendung von EditText mit

android:lines="3" 
android:scrollHorizontally="false" 

Aus irgendeinem Grund funktioniert das aber nur, wenn ich diese Einstellungen im Code anstelle der Layoutdatei (in onCreate) durch mache

TextView tv = (TextView)findViewById(R.id.editText);
if (tv != null) {
    tv.setHorizontallyScrolling(false);
    tv.setLines(3);
}

Ich hoffe, das hilft jemandem, da es eine Weile gedauert hat, um es herauszufinden. Wenn Sie einen Weg finden, das Manifest zum Laufen zu bringen, lassen Sie es uns bitte wissen.

Question

Ist es möglich, ein EditText Widget mit android:inputType="textMultiLine" gesetzt, und android:imeOptions="actionDone" zur gleichen Zeit?

Ich hätte gerne eine mehrzeilige Bearbeitungsbox, in der die Aktionstaste auf der Tastatur nicht "Enter" (Wagenrücklauf) ist, aber es scheint nicht zu funktionieren.

Danke im Voraus







Ein einfacher Weg, um diese Situation zu umgehen:

Ändern Sie die Attribute im EditText:

android:inputType="textMultiLine"
android:scrollHorizontally="false"

zu:

android:inputType="textImeMultiLine"
android:scrollHorizontally="false"



Wenn Sie die Eingabeoption textImeMultiline mit den Optionen flagnext und actionnext verwenden, erhalten Sie anstelle der cariage return eine nächste Schaltfläche




Ich denke, das ist der Weg, um etwas zu tun. Mit android:inputType="textMultiLine" , android:imeOptions="actionDone" macht die Schlüsselfunktionalität mehrdeutig. Denken Sie daran, dass Sie android:lines="10" und vielleicht android:inputType="textMultiLine" entfernen android:inputType="textMultiLine" , aber hängt ab, was Sie manchmal erreichen möchten Sie nur das android:inputType="textMultiLine" und drei ist kein Ersatz dafür.

EditText ed=new EditText(this);
ed.setOnKeyListener(new OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if(keyCode==66){
                //do your stuff here
            }
            return false;
        }
});



Kurze Antwort: Nein, ich glaube, das ist vor API Level 11 (3.0) nicht möglich.

Das gleiche Problem tauchte hier auf (in den Kommentaren zur angenommenen Antwort besprochen):

Android Soft Tastatur Aktionstaste

Aus dem letzten Kommentar:

Wenn ich mir ein paar Apps auf meinem Handy anschaue, scheint es üblich zu sein, dass die Multiline-Box zuletzt mit einer sichtbaren Schaltfläche "Fertig" oder "Senden" darunter (z. B. E-Mail-App) angezeigt wird.




Ein einfacher Weg, um diese Situation zu umgehen:

  • behalte diese Attribute im EditText:

    android:inputType="textMultiLine" 
    android:scrollHorizontally="false"
  • Fügen Sie diesen Code hinzu, um nur die Tastatur zu verbergen, wenn Sie auf ENTER drücken:

    editText.setOnEditorActionListener(new OnEditorActionListener() 
    {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (event.getKeyCode() == KeyEvent.KEYCODE_ENTER) 
        {
            editText.setSelection(0);
            InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
            imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);      
            return true;
         } 
         else 
         {
            return false;
         }
         }
    });