我想创建一个文本输入:
1)始终显示3行
2)不允许用户输入比3行
中的可用空间更多的文本3)如果用户输入的文字大于3行,则不可滚动。
从技术上讲,我允许用户输入最多500个字符以保存到数据库,但我不希望输入的文本数量接近。所以,我对maxLength的使用只是预防性的。
这是我当前的EditText:
<EditText android:id="@+id/edit_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:lines="3"
android:maxLines="3"
android:maxLength="500"
android:inputType="textMultiLine" />
问题
问题在于,如果用户输入的文本大于3行,则EditText会添加其他行并向下滚动到新行中。它仅将用户限制为500个字符。
答案 0 :(得分:3)
要控制引入的行,您可以添加TextWatcher,以便在用户引入新值时,您可以处理错误(例如,删除第三个之后的行并显示toast)。您可以使用\ r和\ n来检查新行。
http://developer.android.com/reference/android/text/TextWatcher.html
TextWatcher watcher = new TextWatcher() {
public void afterTextChanged(Editable s) {
//here you can change edit text and show an error so the lines will never be 3
}
...}
EditText editText=findById(...);
editText.addTextChangedListener(watcher);;
答案 1 :(得分:2)
属性maxLines对应于EditText的最大高度,它控制外边界而不是内部文本行。您必须手动控制用户可以在EditText中输入多少个字符。
这样的事可能有用:
mEditText.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) {
if ( ((EditText)v).getLineCount() > 3 )
return true;
}
return false;
}
});