Android 具有多行换行的EditText(无换行)
如果文本区域的高度为多行,但文本实际上只是包装文本,但禁止输入新行,是否可以使用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
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;
}
}});