2012-01-18 19 views

Respuesta

9

Usted podría utilizar esto:

android:singleLine="false" android:lines="5" 

No sé si eso lo que necesita.

+4

No. android: líneas se trata de las líneas visibles. Estoy interesado en las líneas de texto. Si establece Android: líneas para editar texto y escribe 10 líneas, tendrá 10 líneas de texto, pero solo 5 visibles. Lo que quiero es tener un máximo de 5 líneas de texto. Después de la segunda línea, ya no podrás escribir más. Gracias por la respuesta. – Gratzi

+0

Bien, pero no hay compilación en "limitador de filas". Tienes que hacerlo por ti mismo. Hay un tema en stackoverflow con un código de ejemplo, quizás pueda usarlo: http://stackoverflow.com/questions/7092961/edittext-maxlines-not-working-user-can-still-input-more-lines-than- establecer – MartijnG

+0

Vi esa publicación, pero la corrección maneja solo la tecla Intro y no es muy elegante. Elimina porciones de texto, incluso si no es necesario hacerlo. – Gratzi

-1
android:maxLength="140" 

Creo que esto es igual a una línea, en teoría, podría cambiar el maxlength a "700", que sería 5 líneas. No estoy exactamente seguro de los números, pero la lógica detrás de esto es válida.

+0

Eso no es válido. ¿Qué pasa si el usuario escribe 140x Enter? Él crea 140 líneas entonces. – Sebi

+0

Sebi- lo que ingresa el usuario no crea la cantidad máxima de líneas. este es el código del programa que establece el límite. – Hounge

+0

Esta respuesta no me suena bien. Como se menciona en @Sebi, 140 caracteres podrían abarcar una gran variedad de líneas, dependiendo de qué caracteres estén en la cadena. Aparte de los saltos de línea, hay una gran diferencia entre el ancho de 140 'i's y 140' m's. – PaulrBear

0

Creo que se puede utilizar este código para comprobar el número de líneas en EditarTexto,

editText.getLayout().getLineCount() > row-limit; 

Preferiblemente se puede utilizar en "afterTextChanged()" de un TextWatcher oyente para no permitir al usuario para introducir aún más si el límite de fila ha sido alcanzado.

edit.addTextChangedListener(new TextWatcher() { 

    @Override 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void beforeTextChanged(CharSequence s, int start, int count, 
      int after) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void afterTextChanged(Editable s) { 
     if(editText.getLayout().getLineCount() > row-limit){ 
      //Code to stop edittext from being edited any further. 
      } 
}); 
5

conjunto androide: maxLines = "2" en XML y añade:

edittext.addTextChangedListener(new TextWatcher() { 
    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i2, int i3) { } 
    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i2, int i3) { } 

    @Override 
    public void afterTextChanged(Editable editable) { 
     if (null != edittext.getLayout() && edittext.getLayout().getLineCount() > 2) { 
      edittext.getText().delete(edittext.getText().length() - 1, edittext.getText().length()); 
     } 
    } 
}); 

es solución para mí. Lo mismo puedes hacer por el límite de 3,4 ... n filas para tu texto de edición.

+0

¿Puedes formatear el código de una manera adecuada y también explicarlo un poco si puedes? –

+0

maxLines = "2" en su texto de edición en xml: solo hace visibles 2 filas para el usuario, pero puede escribir más de 2 filas. En este caso, 1 fila se ocultará y el usuario verá la segunda y tercera fila y así sucesivamente.En el método afterTextChanged (Editable editable) verificamos: ¿apareció el nuevo símbolo en la tercera fila, o todavía está en segundo o primero? si el símbolo aparece en la tercera fila, lo eliminamos. Entonces, el texto no puede tener más de 2 filas en el texto de edición. – fvolodimir

2
import android.text.Editable; 
import android.text.TextWatcher; 
import android.widget.EditText; 

public class EditTextLinesLimiter implements TextWatcher { 
    private EditText editText; 
    private int maxLines; 
    private String lastValue = ""; 

    public EditTextLinesLimiter(EditText editText, int maxLines) { 
     this.editText = editText; 
     this.maxLines = maxLines; 
    } 

    @Override 
    public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { 
     lastValue = charSequence.toString(); 
    } 

    @Override 
    public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { 

    } 

    @Override 
    public void afterTextChanged(Editable editable) { 
     if (editText.getLineCount() > maxLines) { 
      int selectionStart = editText.getSelectionStart() - 1; 
      editText.setText(lastValue); 
      if (selectionStart >= editText.length()) { 
       selectionStart = editText.length(); 
      } 
      editText.setSelection(selectionStart); 
     } 
    } 
} 

Y luego:

editText.addTextChangedListener(new EditTextLinesLimiter(editText, 2)); 
Cuestiones relacionadas