2014-04-17 9 views
12

Ich möchte die EditText mit max Linien von 2 und maximale Länge von 20 machen. Wenn die EditText Länge ist mehr als 10, sollte es automatisch zu einer neuen Linie, so dass der Benutzer nicht gehen Drücken Sie die Eingabetaste. Kann mir jemand bei dieser Anforderung helfen?EditText automatisch auf eine neue Zeile wechseln

+2

Ich habe nicht versucht, aber ich denke, Sie sollten mit TextWatcher versuchen. Wenn die Länge 10 erreicht, füge "\ n" zum aktuellen String hinzu. – DucTran

Antwort

0

Für die Linien, so etwas wie:

<EditText 
    android:inputType="textMultiLine" <!-- Multiline input --> 
    android:lines="2" <!-- Total Lines prior display --> 
    android:minLines="1" <!-- Minimum lines --> 
    android:gravity="top|left" <!-- Cursor Position --> 
    android:maxLines="2" <!-- Maximum Lines --> 
    android:layout_height="wrap_content" 
    android:layout_width="fill_parent"/> 

Sie auch mit diesem Parameter spielen könnte (Ist für Android nicht funktionieren < = 3,0):

android:singleLine="false" 

Und für die Nummer von Zeichen, tun etwas wie:

EditText et= (EditText) findViewById(R.id.editText1); 
InputFilter[] filters = new InputFilter[1]; 
filters[0] = new InputFilter.LengthFilter(20); //Filter to 20 characters 
et.setFilters(filters); 

oder verwenden diese anderen Parameter,

android:maxLength="20" im xml

+0

Vielen Dank für Ihre Antwort, aber ich möchte automatisch eingeben, wenn Edittext Länge mehr als 10 ist, also grundsätzlich 10 Zeichen pro Zeilen und Maxline ist nur 2 –

+0

Nur FYI ** maxLines ** Attribut (wenn gesetzt> 2 Zeilen) funktioniert nicht Android <3 ... auch! Es ist immer noch auf 2 Zeilen eingestellt (unabhängig vom Wert). – Fllo

0

Für die EditText 2 Zeilen anzuzeigen. Sie können so schreiben:

android:maxLength="20" 
android:maxLines="2" 
android:singleLine="false" 
android:layout_width="Your Choice" 
13

Es sollte eine sehr elegante Möglichkeit existieren, aber diese Lösung könnte Ihnen als Anhaltspunkt helfen, um zu erreichen, was Sie wollen. Zunächst einmal müssen Sie wie unten Ihre EditText Werte setzen:

<EditText 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:inputType="text|textMultiLine|textCapSentences" 
    android:maxLength="21" 
    android:gravity="left" 
    android:maxLines="2" /> 

Sie müssen das maxLength Attribut 21 setzen, weil die char (neue Zeile) eingeben, wird ein Zeichen in der EditText nehmen , dann kann der Benutzer nur 19 Zeichen anstelle von 20 schreiben.
Dann sollten Sie einen TextWatcher mit einem boolean verwenden (verwendet, wenn der Benutzer seine vorherigen Zeichen entfernt), und dies sollte wie folgt lauten:

// init global boolean 
private boolean isReached = false; 

// in onCreate method 
edittext.addTextChangedListener(new TextWatcher(){ 
    @Override 
    public void afterTextChanged(Editable s) { 
     // if edittext has 10chars & this is not called yet, add new line 
     if(textEd.getText().length() == 10 && !isReached) { 
      textEd.append("\n"); 
      isReached = true; 
     } 
     // if edittext has less than 10chars & boolean has changed, reset 
     if(textEd.getText().length() < 10 && isReached) isReached = false; 
    } 
}); 

Hinweis: Allerdings sollten Sie mit dieser vorsichtig sein Code. In der Tat kann der Benutzer immer noch die Key Enter drücken und dann neue Zeilen hinzufügen. Vielleicht könnten diese Antworten helfen Ihnen, es zu handhaben und den Benutzer halten nur "auf der Straße": Prevent enter key on EditText but still show the text as multi-line

+0

Für zweite und weitere Zeilen kann der Code nicht für die nächste Zeile verschoben werden.Es führt zu mathematischen Berechnungen –

10

Fügen Sie diese auf Ihre EditText xml-Code

android: input = "textMultiLine"

Dadurch wird der Text automatisch in die nächste Zeile verschoben, während Daten eingegeben werden.

+0

Dies fügt \ n Zeichen der Zeichenfolge nicht hinzu. bricht nur die Zeile in der EditText-Ansicht, was das OP nicht verlangt. –

Verwandte Themen