EditText“ maxLines”属性不起作用

时间:2018-10-05 13:24:02

标签: android

我有一个多行EditText,用户可以在其中键入长句。 这就是我想要的:具有6行高度的EditText。从第1行到第5行,我希望EditText的IME Action按钮具有“ Enter”(进入新行)按钮,在第六(最后)行上应更改为“ Done”按钮,以便用户单击时,软键盘应消失。甚至有可能吗?

我使用了imeOptions,inputType,maxLines,lines的各种组合,但是无法实现。有什么想法吗?

这是XML

<EditText
    android:id="@+id/etMessage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/small_padding"
    android:gravity="start"
    android:hint="Your message ..."
    android:imeOptions="actionDone"
    android:inputType="textCapSentences|textMultiLine"
    android:lines="6"
    android:maxLines="6" />

当inputType设置为“ textMultiLine”时,小的IME操作“ Done”按钮将更改为“ Enter”(转到新行)按钮。而且它不断地下降。

当前行为:EditText的高度为6行。在每一行中,用户都可以通过按“返回”按钮跳到下一行,该按钮将光标移到下一行。此行为是可以的,但是当用户到达第六行时,他/她仍然可以按“返回”按钮并转到第七行,这将激活EditText的滚动功能。我不希望这种情况发生。

我想要的行为:我想阻止用户进入第7行。我希望当用户到达第六行时,软键盘具有“完成” 按钮。无论手机,平板电脑还是其他设备都没关系。

This is what I want

I don't want to go to the 7th line

在此,用户转到第七行,第一行消失。而不是让EditText变大,我希望它保持原样并防止用户按“ Enter”按钮转到第7行。这就是为什么当用户到达第六行时在softKeyboard上,“ Enter”按钮应更改为“ Done”按钮,从而关闭softKeyboard。任何实用的想法都欢迎。

3 个答案:

答案 0 :(得分:0)

尝试一下:

<EditText
    android:id="@+id/etMessage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/small_padding"
    android:gravity="start"
    android:hint="Your message ..."
    android:imeOptions="actionDone"
    android:inputType="textCapSentences|textMultiLine"
    android:lines="6"
    android:maxLines="6"
    android:singleLine="false"
 />

仅将此android:singleLine="false"行添加到您的EditText中。

答案 1 :(得分:0)

Try This:

<EditText
    android:id="@+id/etMessage"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginTop="@dimen/small_padding"
    android:gravity="start"
    android:hint="Your message ..."
    android:imeOptions="actionDone"
    android:inputType="textCapSentences|textMultiLine"
    android:lines="8"
    android:minLines="6"
    android:singleLine="false"
 />

添加android:minLines =“ 6”行,删除androidLmaxLines =“ 6”。

答案 2 :(得分:0)

您想要的内容只能通过编程实现。 将TextChangedListener添加到EditText并覆盖afterTextChanged方法:

@Override
public void afterTextChanged(Editable editable) {
    if (editText.getLayout().getLineCount() >= 6) {
        editText.setInputType(InputType.TYPE_CLASS_TEXT);
        editText.setHorizontallyScrolling(false);
    } else {
        editText.setInputType(InputType.TYPE_CLASS_TEXT|TYPE_TEXT_FLAG_MULTI_LINE);
    }
}