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

And*_*Dev 2 android android-edittext

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

<EditText
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:singleLine="false"
    android:minLines="3"
    android:textSize="24sp" />
Run Code Online (Sandbox Code Playgroud)

zee*_*han 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>   
Run Code Online (Sandbox Code Playgroud)


Kla*_*aus 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;
        }
    }});
Run Code Online (Sandbox Code Playgroud)

我的配置中有趣的几行:

                <EditText

                ...

                android:singleLine="true"
                android:inputType="text|textMultiLine"
                android:imeOptions="actionDone"
                />
Run Code Online (Sandbox Code Playgroud)

如果您想EditText在按下 Enter键时隐藏和不聚焦,请将上面的代码替换为:

        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;
        }
    }});
Run Code Online (Sandbox Code Playgroud)