2012-01-18 15 views
12

Czy istnieje sposób określania maksymalnej liczby linii dla EditText? Rozumiem przez to wszystkie linie tekstu, nie tylko te widoczne (jak opisano atrybut the android:maxLines). Liczba linii nie może wynosić 1, więc android:singleLine nie jest opcją.Ustaw maksymalną liczbę linii tekstu dla EditText

Odpowiedz

9

Można to wykorzystać:

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

Nie wiem, czy to robi to, co trzeba.

+4

nr android: Linie około widocznych linii. Interesują mnie linie tekstu. Jeśli ustawisz android: lines na tekst edycji i napiszesz 10 linii, będziesz miał 10 linii tekstu, ale tylko 5 będzie widocznych. Chcę mieć maksymalnie 5 linii tekstu. Po linii Fift nie powinieneś już pisać. Dziękuję za odpowiedź. – Gratzi

+0

OK, ale nie ma wbudowanego "ogranicznika wiersza". Musisz to zrobić sam. Jest temat na stackoverflow z przykładowym kodem, może możesz użyć tego: http://stackoverflow.com/questions/7092961/edittext-maxlines-not-working-user-can-can-input-more-lines-than- set – MartijnG

+0

Widziałem ten post, ale poprawka obsługuje tylko klawisz Enter i nie jest zbyt elegancki. Usuwasz fragmenty tekstu, nawet jeśli nie jest to konieczne. – Gratzi

-1
android:maxLength="140" 

Wierzę, że jest równa jednej linii, teoretycznie można zmienić maksymalną długość na "700", która będzie wynosić 5 linii. Nie jestem dokładnie pewien liczb, ale logika stojąca za tym jest ważna.

+0

To nie jest poprawne. Co się stanie, jeśli użytkownik wpisze 140x Enter? Tworzy wtedy 140 linii. – Sebi

+0

Sebi - to, co użytkownik wprowadza, nie tworzy maksymalnej liczby linii. jest to kod programu, który ustawia limit. – Hounge

+0

Ta odpowiedź nie brzmi dla mnie dobrze. Jak wspomina @Sebi, 140 znaków może obejmować dużą różnorodność linii, w zależności od tego, które znaki są w ciągu znaków. Oprócz przerw w linii istnieje duża różnica między szerokością 140 'i 140 m. – PaulrBear

0

Wierzę, że można użyć tego kodu, aby sprawdzić liczbę wierszy w EditText,

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

Korzystnie można używać go w TextWatcher słuchacza „afterTextChanged()”, aby nie pozwolić użytkownikowi na wprowadzenie dalszych jeśli osiągnięto limit wierszy.

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

zestaw android: maxLines = "2" w XML i dodać:

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

jest rozwiązaniem dla mnie. To samo możesz zrobić dla limitu wierszy 3,4 ... n dla editekstu.

+0

Czy potrafisz sformatować kod w odpowiedni sposób, a także wyjaśnić go trochę, jeśli potrafisz? –

+0

maxLines = "2" w edytorze XML w xml - wyświetla tylko 2 wiersze dla użytkownika, ale może wpisać więcej niż 2 wiersze. W tym przypadku 1 wiersz zostanie ukryty, a użytkownik zobaczy drugi i trzeci wiersz itd.W metodzie afterTextChanged (Editable editable) sprawdzamy - czy nowy symbol pojawił się w trzecim rzędzie, czy nadal jest na sekundę lub na początku. jeśli symbol pojawia się w trzecim rzędzie - usuwamy go. Zatem tekst nie może być dłuższy niż 2 wiersze w 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); 
     } 
    } 
} 

, a następnie:

editText.addTextChangedListener(new EditTextLinesLimiter(editText, 2)); 
Powiązane problemy