2012-01-18 11 views
12

Esiste un modo per specificare il numero massimo di righe per un EditText? Con questo intendo tutte le righe di testo, non solo quelle visibili (come descritto nell'attributo the android:maxLines). Il numero di linee non deve essere 1, quindi android:singleLine non è un'opzione.Imposta il numero massimo di righe di testo per un EditText

risposta

9

È possibile utilizzare questo:

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

Non so se che fa quello che vi serve.

+4

No. Android: linee è di circa le linee visibili. Sono interessato alle linee di testo. Se imposti Android: linee in un testo di modifica e scrivi 10 linee, avrai 10 righe di testo, ma solo 5 visibili. Quello che voglio è avere un massimo di 5 righe di testo. Dopo la linea fift non dovresti più essere in grado di scrivere. Grazie per la risposta. – Gratzi

+0

Ok, ma non c'è build in "limitatore di riga". Devi farlo da solo. C'è un argomento su StackOverflow con un codice di esempio, forse puoi usare quello: http://stackoverflow.com/questions/7092961/edittext-maxlines-not-working-user-can-still-input-more-lines-than- set – MartijnG

+0

Ho visto quel post, ma la correzione gestisce solo il tasto invio e non è molto elegante. Si eliminano porzioni di testo, anche se non è necessario farlo. – Gratzi

-1
android:maxLength="140" 

Credo che questo è uguale a una linea, in teoria è possibile modificare la lunghezza massima a "700" che sarebbe 5 linee. Non sono esattamente sicuro sui numeri ma la logica dietro è valida.

+0

Questo non è valido. Cosa succede se l'utente digita 140x Invio? Crea quindi 140 linee. – Sebi

+0

Sebi- ciò che l'utente inserisce non crea il numero massimo di righe. questo è il codice del programma che stabilisce il limite. – Hounge

+0

Questa risposta non mi sembra giusta. Come menzionato @Sebi, 140 caratteri possono estendersi su una grande varietà di linee, a seconda dei caratteri presenti nella stringa. Oltre alle interruzioni di linea, c'è una grande differenza tra la larghezza di 140 'i e 140' m's. – PaulrBear

0

io credo che si possa utilizzare questo codice per verificare il numero di linee in EditText,

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

Preferibilmente si possono utilizzare in un TextWatcher Listener "afterTextChanged()" per non consentire all'utente per l'inserimento di ulteriori se il il limite di riga è stato raggiunto.

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

set android: maxLines = "2" in formato XML e aggiungere:

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()); 
     } 
    } 
}); 

è soluzione per me. Lo stesso si può fare per 3,4 ... n limite di righe per il proprio edittext.

+0

Puoi formattare il codice in modo corretto e anche spiegarlo un po 'se puoi? –

+0

maxLines = "2" nel tuo edittext in xml - rende visibili solo 2 righe per l'utente, ma può digitare più di 2 righe. In questo caso, una riga verrà nascosta e l'utente vedrà la seconda e la terza riga e così via.Nel metodo afterTextChanged (Modificabile modificabile) controlliamo - il nuovo simbolo appare nella terza riga, o è ancora in secondo o primo. se il simbolo appare nella terza riga, lo cancelliamo. Quindi il testo non può essere più lungo di 2 righe in edittext. – 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); 
     } 
    } 
} 

E poi:

editText.addTextChangedListener(new EditTextLinesLimiter(editText, 2)); 
Problemi correlati