固定大小的多行EditText?

时间:2016-03-30 19:57:46

标签: android android-layout android-edittext

我有一个我想使用的EditText,所以人们可以输入一个简短的生物。

所以我试图让它固定在,例如,一个4行高的盒子。我不希望它用输入“缩放”或“移位” - 我试图通过自动换行使其成为固定行数的固定框。

我确实尝试添加lines="4"maxLines="4"以及inputType="textCapSentences|textMultiLine",但似乎并不正确。当我设置文本时,它出现在EditText的中间(而不是左上角),它似乎让我输入了很多,所以我可以在第一行中有一个单词,然后是一个像20行一样的字符

当前XML:

    <EditText
        android:background="#00ff00" 
        android:id="@+id/editTextId"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:lines="4"
        android:maxLines="4"
        android:inputType="textCapSentences|textMultiLine"
        android:gravity="left|top"/>

我正在使用绿色背景,所以我现在可以更容易地看到它。现在,这可以让你输入你想要的数量,但我想把它限制在给定的空间。

3 个答案:

答案 0 :(得分:1)

修复居中文字问题add:

android:gravity="top|left"

为防止用户输入超过4行,您需要按代码进行操作。 将TextWatcher添加到EditText,并检查每次文字更改后的行数:

TextWatcher textWatcher = new TextWatcher() {
   onTextChanged(CharSequence s, int start, int before, int count) {
      // Check number of lines here
   }
};
editText.addTextChangedListener(textWatcher);

答案 1 :(得分:1)

没有内置代码来实现您的需求。但这是一个解决方法 -

private String enteredText;

edtText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
            }

            @Override
            public void afterTextChanged(Editable s) {

                if (edtText.getLineCount() > 4) {
                    edtText.setText(enteredText);
                    edtText.setSelection(edtText.getText().length()); //This statement is to move the cursor at the end of the text otherwise it'll be moved to the start of the text.
                }
                else {
                    enteredText = edtText.getText().toString();
                }
            }
        });

希望这会有所帮助!!

答案 2 :(得分:0)

只需将此属性添加到您的edittext

即可
 android:inputType="textMultiLine"