这是我的编辑文字: -
<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
现已弃用。 我无法删除编辑文本中的数字,我也不想使用弃用的方法。任何人都可以解决这个问题。谢谢你
答案 0 :(得分:3)
以下是软件键盘按钮“Next”的简化解决方案:
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);
}
}
});
此处,正则表达式[^a-zA-Z0-9]+
对应于所讨论的android:digits
的{{1}}的允许值。
答案 1 :(得分:2)
你可以使用
android:lines="1"
取代
android:maxLines
或
android:singleLine="true".
我知道你尝试了很多解决方案,试试
android:lines="1"
如果您之前没有尝试过这些话。
答案 2 :(得分:1)
问题是你点击Enter键而不是你需要的actionNext,以便将光标移动到下一个EditText
指定输入法操作
大多数软输入法在底部提供用户操作按钮 适合当前文本字段的角落。默认情况下 系统使用此按钮进行下一步或完成操作,除非你的 文本字段允许多行文本(例如with android:inputType =&#34; textMultiLine&#34;),在这种情况下,操作按钮是 回车。但是,您可以指定其他操作 可能更适合您的文本字段,例如Send或Go。
它会导致操作按钮的回车。所以这意味着不会解雇android:nextFocusDown
首先,让我们看看不推荐使用的singleLine和maxLines
之间的区别<强> SINGLELINE 强>
当您设置android:singleLine="true"
时,一行文字在EditText中可见,但Enter键在键盘中不可见
<强> MAXLINES 强>
当您使用特定值设置android:maxLines
属性时,在EditText中只能看到相同数量的行文本,并且在键盘中输入键也可用于输入。
因此,当您单击操作按钮时,它会根据您的代码触发Enter Action。如果您使用android:inputType="textMultiLine"
属性
android:maxLines
更改inputType属性
MAXLINES
在API级别1中添加了int maxLines使TextView最多为此 很多线条高。在可编辑文本上使用时,inputType 属性的值必须与text的MultiMine标志相结合 要应用的maxLines属性。
可以是整数值,例如&#34; 100&#34;。
当我使用正确的属性自定义代码时,它仍然触发了您想要的Enter键而不是IME_ACTION_NEXT。我认为由于
而没有解决问题textMultiLine可以与文本及其变体结合使用 该字段中有多行文本。如果未设置此标志,则为文本 字段将被限制为单行。对应于 TYPE_TEXT_FLAG_MULTI_LINE。
TYPE_TEXT_FLAG_MULTI_LINE
在API级别3中添加了TYPE_TEXT_FLAG_MULTI_LINE标志 TYPE_CLASS_TEXT:可以在该字段中输入多行文本。 如果未设置此标志,则文本字段将被约束为a 单线。 IME可能 也选择不显示回车键 此标志未设置,因为不需要创建新行。
常数值:131072(0x00020000)
<强> SOLUTION: 强>
子类EditText并调整IME选项。之后,您不需要android:maxLines
或android: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;
}
您还可以查看另一篇帖子here。我根据你的目的重新配置了这篇文章的接受答案
答案 3 :(得分:0)
android:digits
指定EditText具有数字输入方法,符合docs
您可以使用android:inputType="personName"
来实现与当前digits
attr
答案 4 :(得分:0)
android:maxLines
仅使TextView最多 这么多行 tall ,而不是阻止用户输入更多字符。
与android:lines
相同,只会使TextView 完全这么多行高。
答案 5 :(得分:0)
您的解决方案的变通方法代码如下,
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" />
爪哇:
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) {
}
});