EditText自动换行问题

24

我想将EditText设置为最多2行并且最多20个字符。如果EditText的长度超过10个字符,它应该自动换行,这样用户就不需要按Enter键了。有人可以帮我实现这个需求吗?


3
我还没有尝试过,但我认为你应该尝试使用TextWatcher。当长度达到10时,在当前字符串中添加"\n"。 - DucTran
6个回答

53

将以下内容添加到你的EditText xml代码中:

android:inputType="textMultiLine"

这会在输入数据时自动将文本移到下一行。


2
这段代码并不会向字符串中添加 \n 字符,它只是在 EditText 视图中换行,这并不是 OP 所要求的。 - Yevgeny Simkin

27

可能存在更加优雅的方法,但是这个解决方案可以作为一种线索帮助你实现你想要的内容。首先,你需要将EditText的值设置如下:

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text|textMultiLine|textCapSentences"
    android:maxLength="21"
    android:gravity="left"
    android:maxLines="2" />  

你必须将maxLength属性设置为21,因为在EditText中输入换行符会占用一个字符,这意味着用户只能输入19个字符而不是20个字符。
然后,你应该使用具有booleanTextWatcher(用于用户删除先前字符的情况),其应如下所示:

// init global boolean
private boolean isReached = false;

// in onCreate method
edittext.addTextChangedListener(new TextWatcher(){
    @Override
    public void afterTextChanged(Editable s) {
        // if edittext has 10chars & this is not called yet, add new line
        if(textEd.getText().length() == 10 && !isReached) {
            textEd.append("\n");
            isReached = true;
        }
        // if edittext has less than 10chars & boolean has changed, reset
        if(textEd.getText().length() < 10 && isReached) isReached = false;
    }
});  

注意:然而,您应该小心使用这段代码。实际上,用户仍然可以按下回车键,然后添加新行。也许这些答案可以帮助您处理它并保持用户“沿着您的道路”:Prevent enter key on EditText but still show the text as multi-line


对于第二行及其后的代码,它将无法处理移动到下一行的操作。这会导致进行数学计算。 - sudharsan chandrasekaran

4

只需将输入类型更改为 textMultiLine

  <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:inputType="textMultiLine"/>

2

如果要让EditText显示两行,你可以像这样编写代码:

android:maxLength="20"
android:maxLines="2"
android:singleLine="false"
android:layout_width="Your Choice"

0

对于这些行,做如下操作:

<EditText
    android:inputType="textMultiLine" <!-- Multiline input -->
    android:lines="2" <!-- Total Lines prior display -->
    android:minLines="1" <!-- Minimum lines -->
    android:gravity="top|left" <!-- Cursor Position -->
    android:maxLines="2" <!-- Maximum Lines -->
    android:layout_height="wrap_content"
    android:layout_width="fill_parent"/>

你也可以尝试调整这个参数(对于 Android <= 3.0 不起作用):

android:singleLine="false"

对于字符数量,可以这样做:

EditText et= (EditText) findViewById(R.id.editText1);
InputFilter[] filters = new InputFilter[1];
filters[0] = new InputFilter.LengthFilter(20); //Filter to 20 characters
et.setFilters(filters);

或者,使用另一个参数:

android:maxLength="20"xml


谢谢你的回答,但我想要在EditText长度超过10时自动换行,基本上每行10个字符,最多只有2行。 - Frank Junior
仅供参考,当设置> 2行时,maxLines属性在Android <3中不起作用...太!它仍然设置为2行(无论值为多少)。 - Blo

0

textView.setText("你的文本" + "\n" + "你的文本");


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接