具有多行自动换行功能的EditText(无换行符)

4

是否可以有一个EditText,文本区域的高度为多行,但实际上只是换行文本而不允许输入新行。我能想到的唯一解决方案是允许用户输入新行,但在按键或输入文本后将新行字符替换为一个空格。以下是我的代码:

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    android:minLines="3"
    android:textSize="24sp" />

解决方案可以在这里找到: https://dev59.com/FWox5IYBdhLWcg3w_ZR0 - Johann
4个回答

7
在这种情况下,唯一真正起作用的方法是添加一个InputFilter来防止输入换行符\n
代码:
        editText.setFilters(new InputFilter[]{new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            if (source != null) {
                String s = source.toString();
                if (s.contains("\n")) {
                    return s.replaceAll("\n", "");
                }
            }
            return null;
        }
    }});

以下是我配置文件中的有趣代码行:

                <EditText

                ...

                android:singleLine="true"
                android:inputType="text|textMultiLine"
                android:imeOptions="actionDone"
                />

如果您希望在按下回车键时隐藏和取消焦点的 EditText,请使用以下代码替换上面的代码:

        editText.setFilters(new InputFilter[]{new InputFilter() {
        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
            if (source != null) {
                String s = source.toString();
                if (s.contains("\n")) {
                    // Hide soft keyboard
                    InputMethodManager imm = (InputMethodManager)MainActivity.this.getBaseContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
                    // Lose focus
                    editText.clearFocus();
                    // Remove all newlines
                    return s.replaceAll("\n", "");
                }
            }
            return null;
        }
    }});

7

这是我在我的拼车应用程序中使用的代码,非常好用。我的目标SDK是17(Android 4.0.3)。

<EditText
            android:inputType="text|textMultiLine|textCapSentences"
            android:layout_margin="1dp"
            android:gravity="top"
            android:background="#FFEBCD"
            android:textSize="26sp"
            android:id="@+id/offer_notes"
            android:padding="10dp"
            android:textColor="#000"
            android:layout_height="wrap_content"
            android:layout_width="wrap_content"
            android:paddingLeft="5sp"
            android:hint="Notes, e.g. $10 per passenger, leaving early morning 7AM from Bay and Yonge intersection, no smoking or pets, please. Chevy Venture, very comfortable.">
        </EditText>   

-1
<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="true"
    android:lines="1"
    android:paddingBottom="250dp"
    android:text="You mean like this?"
    android:textSize="24sp" />

1
那只是使高度变大了,它并不支持换行。 - Johann

-2

默认情况下,如果一行文字超出了视图宽度,它会自动换行,但不会在文本值中添加回车符。尽管用户可以手动输入“\n”符号。

我认为允许用户随意输入并在需要使用EditText值时替换所有“\n”出现将会更加方便。


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