设置EditText的最大文本行数

时间:2012-01-18 14:18:44

标签: android

有没有办法指定EditText的最大行数?我的意思是所有文本行,而不仅仅是可见文本(描述了the android:maxLines属性)。行号不能为1,因此android:singleLine不是一个选项。

6 个答案:

答案 0 :(得分:10)

你可以用这个:

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

我不知道这是否符合你的需要。

答案 1 :(得分:5)

在xml中设置android:maxLines =“2”并添加:

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行限制执行相同操作。

答案 2 :(得分: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));

答案 3 :(得分:0)

我相信您可以使用此代码检查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.
          }
});

答案 4 :(得分:0)

<EditText
android:id="@+id/edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="text"
android:maxLines="1" />

您只需要确保已设置属性“ inputType”。没有这一行是行不通的。

android:inputType =“ text”

答案 5 :(得分:-1)

android:maxLength="140" 

我相信这等于一行,理论上你可以将maxlength更改为“700”,即5行。我不确定数字,但背后的逻辑是有效的。