Android 具有多行换行的EditText(无换行)

Android 具有多行换行的EditText(无换行),android,android-edittext,Android,Android Edittext,如果文本区域的高度为多行,但文本实际上只是包装文本,但禁止输入新行,是否可以使用EditText。我能想到的唯一解决方案是允许用户输入新行,但在键盘上或输入文本后,仅用空格替换新行字符。以下是我所拥有的: <EditText android:layout_width="fill_parent" android:layout_height="wrap_content" android:singleLine="false" android:minLines="3

如果文本区域的高度为多行,但文本实际上只是包装文本,但禁止输入新行,是否可以使用EditText。我能想到的唯一解决方案是允许用户输入新行,但在键盘上或输入文本后,仅用空格替换新行字符。以下是我所拥有的:

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


默认情况下,如果行与视图宽度不匹配,则它会包装新词,但不会向文本值添加回车符。尽管用户可以手动输入'\n'符号。
我认为允许用户键入他想要的内容,然后在需要使用EditText value时替换所有出现的“\n”会很方便。

这就是我在Rideshare应用程序中使用的内容,效果非常好。我的目标SDK是17(Android 4.0.3)


在这种情况下,唯一对我有效的方法是添加一个
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.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.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;
        }
    }});