3

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

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

4 回答 4

6

这就是我在 The Rideshare 应用程序中使用的,效果很好。我的目标 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>   
于 2013-07-11T19:26:25.147 回答
6

在这种情况下,唯一对我有用的是添加一个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;
        }
    }});
于 2016-01-10T09:32:03.987 回答
-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" />
于 2013-02-26T08:06:15.517 回答
-2

默认情况下,如果行不适合视图宽度,它会换行新单词,但不要在文本值中添加回车。虽然用户可以手动输入“\n”符号。

我认为允许用户输入任何他想要的内容,然后在需要使用 EditText 值时替换所有出现的 '\n' 会很方便。

于 2013-02-26T15:35:57.350 回答