我有一个多行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行。我希望当用户到达第六行时,软键盘具有“完成” 按钮。无论手机,平板电脑还是其他设备都没关系。
在此,用户转到第七行,第一行消失。而不是让EditText变大,我希望它保持原样并防止用户按“ Enter”按钮转到第7行。这就是为什么当用户到达第六行时在softKeyboard上,“ Enter”按钮应更改为“ Done”按钮,从而关闭softKeyboard。任何实用的想法都欢迎。
答案 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);
}
}