Android EditText具有固定数量的最大行并且没有滚动

时间:2014-04-04 17:50:13

标签: android android-edittext

我想创建一个文本输入:

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个字符。

2 个答案:

答案 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;
        }
 });