设置EditText imeOptions到actionNext使用数字时没有效果

这里我的edittext: –

<com.os.fastlap.util.customclass.EditTextPlayRegular android:id="@+id/full_name_et" style="@style/Edittext_white_13sp" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="@dimen/_5sdp" android:background="#00ffffff" android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" android:imeOptions="actionNext" android:inputType="text" android:maxLength="20" android:maxLines="1" android:nextFocusDown="@+id/last_name_et" android:textCursorDrawable="@null" /> 

当我在edittext中删除digit ,它工作正常,但与digit imeOptions不起作用。 但一个令人惊讶的事情,如果我使用singleLine而不是maxLines它工作正常。 但singleLine现在已被弃用。 我不能删除我的edittext中的数字,我不想使用弃用的方法 。 任何人都可以解决这个问题。 非常感谢

Related of "设置EditText imeOptions到actionNext使用数字时没有效果"

软件键盘button“下一步”是一个简化的解决scheme:

 final String NOT_ALLOWED_CHARS = "[^a-zA-Z0-9]+"; final EditText editText = (EditText) findViewById(R.id.editText); editText.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 (!TextUtils.isEmpty(s)) { // remove the listener to avoid StackoverflowException editText.removeTextChangedListener(this); // replace not allowed characters with empty strings editText.setText(s.toString().replaceAll(NOT_ALLOWED_CHARS, "")); // setting selection moves the cursor at the end of string editText.setSelection(editText.getText().length()); // add the listener to keep watching editText.addTextChangedListener(this); } } }); 

这里,正则expression式[^a-zA-Z0-9]+对应于所讨论的EditTextandroid:digits的允许值。

您可以使用

  android:lines="1" 

代替

 android:maxLines 

要么

 android:singleLine="true". 

我知道你已经尝试了很多解决scheme,尝试一下

 android:lines="1" 

这些如果你还没有尝试过。

android:digits指定EditText有一个数字input方法,按照文档

你可以使用android:inputType="personName"来达到和你当前的digits attr一样的效果

问题是你点击Enter键而不是你需要的actionNext来移动光标到下一个EditText

指定input方法操作

大多数软input方法在适合当前文本字段的底部angular落处提供用户操作button。 默认情况下,除非你的文本字段允许使用多行文本(比如使用android:inputType =“textMultiLine”),否则系统会使用此button进行Next或Done动作,在这种情况下,动作button是回车符。 但是,您可以指定更适合您的文本字段的其他操作,例如“发送”或“去”。

它会导致您的操作button回车。 所以这意味着不会触发android:nextFocusDown

首先,让我们看看不赞成使用的singleLine和maxLines之间的区别

单线

当您设置android:singleLine="true"一行文本在EditText中可见,但Enter键在键盘中不可见

MAXLINES

当您使用特定值设置android:maxLines属性时,只有相同数量的行文本在EditText中可见,并在input中也可见的小键盘中input密钥。

所以,当你点击操作button时,它会根据你的代码触发input操作。 此外,如果您使用android:maxLines属性,则必须使用android:maxLines android:inputType="textMultiLine"更改inputType属性

MAXLINES

在API级别1中添加int maxLines使TextView最多只有很多行。 在可编辑文本上使用时,inputType属性的值必须与textMultiLine标志组合,以应用maxLines属性。

可能是一个整数值,如“100”。


当我使用正确的属性自定义您的代码时,它仍然是使用Enter键而不是您想要的IME_ACTION_NEXT 。 我认为这并没有解决问题

textMultiLine可以与文本及其变体组合,以允许在该字段中的多行文本。 如果没有设置此标志,则文本字段将被限制为一行。 对应于TYPE_TEXT_FLAG_MULTI_LINE。


TYPE_TEXT_FLAG_MULTI_LINE

在API级别3中添加int TYPE_TEXT_FLAG_MULTI_LINE TYPE_CLASS_TEXT的标志:可以在该字段中input多行文本。 如果没有设置此标志,则文本字段将被限制为一行。 当这个标志未被设置时, IME也可以select不显示回车键,因为不需要创build新的行。

常量值:131072(0x00020000)


解:

子类EditText并调整IME选项。 之后,你不需要android:maxLinesandroid:singleLine属性。

 @Override public InputConnection onCreateInputConnection(EditorInfo outAttrs) { InputConnection connection = super.onCreateInputConnection(outAttrs); int imeActions = outAttrs.imeOptions&EditorInfo.IME_MASK_ACTION; if ((imeActions&EditorInfo.IME_ACTION_NEXT) != 0) { // clear the existing action outAttrs.imeOptions ^= imeActions; // set the DONE action outAttrs.imeOptions |= EditorInfo.IME_ACTION_NEXT; } if ((outAttrs.imeOptions&EditorInfo.IME_FLAG_NO_ENTER_ACTION) != 0) { outAttrs.imeOptions &= ~EditorInfo.IME_FLAG_NO_ENTER_ACTION; } return connection; } 

你也可以在这里查看另一个post。 我重新configuration了这个post的接受答案,你的目的

仅限android:maxLines使TextView 最多可以有多行,不会阻止用户input更多字符。

android:lines相同android:lines仅使TextView 正好是这么多行高的行。

解决scheme的解决方法代码如下所示,

XML文件

  <EditText android:id="@+id/full_name_et" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5sp" android:background="#00ffffff" android:imeOptions="actionNext" android:inputType="text" android:maxLines="1" android:maxLength="20" android:textCursorDrawable="@null" /> 

Java的:

 final EditText edtfirstName = (EditText) findViewById(R.id.full_name_et); edtfirstName.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence charSequence, int start, int before, int count) { if (charSequence.toString().startsWith(" ")) { String result = charSequence.toString().replace(" ", "").replaceAll("[^a-zA-Z]+", ""); if (!charSequence.toString().equals(result)) { edtfirstName.setText(result); edtfirstName.setSelection(result.length()); } } else { String result = charSequence.toString().replaceAll("[^a-zA-Z ]+", ""); if (!charSequence.toString().equals(result)) { edtfirstName.setText(result); edtfirstName.setSelection(result.length()); } } } @Override public void afterTextChanged(Editable s) { } });