android如何使edittext中的文本完全固定行

android如何使edittext中的文本完全固定行,android,android-edittext,Android,Android Edittext,我想允许use只输入5行,我尝试了这个 <EditText android:layout_below="@+id/tv_signup_descriptionError" android:id="@+id/et_signup_description" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="5dip

我想允许use只输入5行,我尝试了这个

<EditText
    android:layout_below="@+id/tv_signup_descriptionError"
    android:id="@+id/et_signup_description"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="5dip"
    android:hint="@string/et_hint_enterDescription"
    android:singleLine="false"
    android:lines="5"
    android:gravity="top"
    android:scrollHorizontally="false"
    android:inputType="textMultiLine" 
    android:maxLines="5"/>


但我仍然可以在第五行之后按Enter键,maxLines属性用于限制编辑文本的高度。要限制最大行数,必须在代码中自己完成。

不能使用任何XML属性

maxlines
表示编辑文本的
最大高度
,而表示输入行数

但是,您可以实现自己的代码来检查行数

以下代码不是我自己的代码,而是取自


@Swayam您是对的,但此解决方案已得到改进:

1-更好的性能

2-在您的解决方案中,如果您输入了7行(最大输入行),然后在顶行中按enter键,最后一行将被删除,但在此解决方案中,“enter”键已被忽略。

 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() >= 7 )
                        return true;
                    }

                return false;
            }
     });

/**要设置的最大行数*/

  public void afterTextChanged(Editable editable) {
        int lines = mEditText.getLineCount();
        if (lines > MAX_LINES) {
            String s = editable.toString();
            int start = mEditText.getSelectionStart();
            int end = mEditText.getSelectionEnd();

            if (start == end && start < s.length() && start > 1) {
                s = s.substring(0, start - 1) + s.substring(start);
            } else {
                s = s.substring(0, s.length() - 1);
            }

            mEditText.setText(s);
            mEditText.setSelection(mEditText.getText().length());
            // Toast.makeText(RatingActivity.this, "max line set to MAX_LINES", Toast.LENGTH_SHORT).show();
  }
public void-afterextchanged(可编辑){
int lines=mEditText.getLineCount();
如果(线>最大线){
字符串s=可编辑的.toString();
int start=mEditText.getSelectionStart();
int end=mEditText.getSelectionEnd();
如果(开始==结束和开始1){
s=s.子串(0,开始-1)+s.子串(开始);
}否则{
s=s.substring(0,s.length()-1);
}
mEditText.setText(s);
mEditText.setSelection(mEditText.getText().length());
//Toast.makeText(RatingActivity.this,“最大行设置为最大行”,Toast.LENGTH\u SHORT.show();
}

这段代码用于将EditText最大行数限制设置为最大行数。

当我第一次按enter键时,您的代码使EditText为空,为什么?
((EditText)v)。setText(“”;
如果不需要,请删除此部分。抱歉,您的代码不起作用:(,在第五行之后,我仍然可以按
enter
如果您不知道,请不要担心,我可以开始新的quesiton@FernadoMargin:我想我会非常感激的。因为到目前为止,我真的没有时间调试代码。我自己甚至都没有试过。也许我会在以后的某个时候看一看。现在得赶紧了。对不起。这个解决方案错过了通过代码调用setText的情况。作为doc,这仅适用于硬件键盘。谢谢!可能重复此代码。请尝试此代码
  public void afterTextChanged(Editable editable) {
        int lines = mEditText.getLineCount();
        if (lines > MAX_LINES) {
            String s = editable.toString();
            int start = mEditText.getSelectionStart();
            int end = mEditText.getSelectionEnd();

            if (start == end && start < s.length() && start > 1) {
                s = s.substring(0, start - 1) + s.substring(start);
            } else {
                s = s.substring(0, s.length() - 1);
            }

            mEditText.setText(s);
            mEditText.setSelection(mEditText.getText().length());
            // Toast.makeText(RatingActivity.this, "max line set to MAX_LINES", Toast.LENGTH_SHORT).show();
  }