Установите максимальное количество текстовых строк для EditText

Есть ли способ указать максимальное количество строк для EditText? Под этим я подразумеваю все строки текста, а не только видимые (как атрибут the android:maxLines). Номер строки не должен быть 1, поэтому android:singleLine не является опцией.

Ответ 1

Вы можете использовать это:

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

Я не знаю, делает ли это то, что вам нужно.

Ответ 2

установите android: maxLines = "2" в xml и добавьте:

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

является решением для меня. То же самое можно сделать для ограничения 3,4... n строк для вашего edittext.

Ответ 3

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

И затем:

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

Ответ 4

Я считаю, что вы можете использовать этот код для проверки количества строк в edittext,

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

Предпочтительно вы можете использовать его в TextWatcher Listener "afterTextChanged()", чтобы запретить пользователю вводить дальше, если предел строки достигнут.

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

android:maxLength="140" 

Я считаю, что это равно одной строке, в теории вы можете изменить максимальную длину до "700", которая будет 5 строк. Я не совсем уверен в цифрах, но логика, лежащая в ее основе, действительна.