如何创建编辑文本接受字母仅在机器人?

如何在 android 中只在 EditText 中输入字母?

117839 次浏览

试试这个

<EditText
android:id="@+id/EditText1"
android:text=""
android:inputType="text|textNoSuggestions"
android:textSize="18sp"
android:layout_width="80dp"
android:layout_height="43dp">
</EditText>

可以找到其他 inputType 这里。

EditText state = (EditText) findViewById(R.id.txtState);




Pattern ps = Pattern.compile("^[a-zA-Z ]+$");
Matcher ms = ps.matcher(state.getText().toString());
boolean bs = ms.matches();
if (bs == false) {
if (ErrorMessage.contains("invalid"))
ErrorMessage = ErrorMessage + "state,";
else
ErrorMessage = ErrorMessage + "invalid state,";


}
edittext.setFilters(new InputFilter[] {
new InputFilter() {
public CharSequence filter(CharSequence src, int start,
int end, Spanned dst, int dstart, int dend) {
if(src.equals("")){ // for backspace
return src;
}
if(src.toString().matches("[a-zA-Z ]+")){
return src;
}
return edittext.getText().toString();
}
}
});

但是,请彻底测试!

通过 XML,您可以轻松地在 Xml (edit Text)中执行类型跟踪代码..。

android:digits="abcdefghijklmnopqrstuvwxyz"

只有角色才能被接受。

使用 EditText 标记添加此行。

android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

EditText 标签应该是这样的:

<EditText
android:id="@+id/editText1"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />

如果还有人想要这个,支持 Unicode 的 Java 正则表达式?是个不错的选择。这是当你只需要字母(不管什么编码-日语,甜的)在一个编辑文本。稍后,您可以使用 MatcherPattern.compile()检查它

将代码编辑文本 xml 文件,

   android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

对于空格,可以在数字中添加单个空格。如果您需要像点这样的特殊字符,还可以在列表中添加逗号

数字 = “ abcdefghiklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ”

对于那些希望他们的编辑文本只接受字母和空格(既不是数字也不是任何特殊字符) ,那么可以使用这个 InputFilter。 在这里,我创建了一个名为 getEditTextFilter()的方法,并在其中编写了 InputFilter。

public static InputFilter getEditTextFilter() {
return new InputFilter() {


@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {


boolean keepOriginal = true;
StringBuilder sb = new StringBuilder(end - start);
for (int i = start; i < end; i++) {
char c = source.charAt(i);
if (isCharAllowed(c)) // put your condition here
sb.append(c);
else
keepOriginal = false;
}
if (keepOriginal)
return null;
else {
if (source instanceof Spanned) {
SpannableString sp = new SpannableString(sb);
TextUtils.copySpansFrom((Spanned) source, start, sb.length(), null, sp, 0);
return sp;
} else {
return sb;
}
}
}


private boolean isCharAllowed(char c) {
Pattern ps = Pattern.compile("^[a-zA-Z ]+$");
Matcher ms = ps.matcher(String.valueOf(c));
return ms.matches();
}
};
}

找到这个 inputFilter 后,将其附加到您的 edit Text,如下所示:

mEditText.setFilters(new InputFilter[]{getEditTextFilter()});

最初的功劳归于@UMAR,他提出了使用正则表达式进行验证的想法,还有@KamilSeveryn

在编辑器中只允许使用字母表 android:

InputFilter letterFilter = new InputFilter() {
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
String filtered = "";
for (int i = start; i < end; i++) {
char character = source.charAt(i);
if (!Character.isWhitespace(character)&&Character.isLetter(character)) {
filtered += character;
}
}


return filtered;
}


};
editText.setFilters(new InputFilter[]{letterFilter});

尝试此方法

Java:

EditText yourEditText = (EditText) findViewById(R.id.yourEditText);
yourEditText.setFilters(new InputFilter[] {
new InputFilter() {
@Override
public CharSequence filter(CharSequence cs, int start,
int end, Spanned spanned, int dStart, int dEnd) {
// TODO Auto-generated method stub
if(cs.equals("")){ // for backspace
return cs;
}
if(cs.toString().matches("[a-zA-Z ]+")){
return cs;
}
return "";
}
}});

对科特林来说:

 val yourEditText = findViewById<View>(android.R.id.yourEditText) as EditText
val reges = Regex("^[0-9a-zA-Z ]+$")
//this will allow user to only write letter and white space
yourEditText.filters = arrayOf<InputFilter>(
object : InputFilter {
override fun filter(
cs: CharSequence, start: Int,
end: Int, spanned: Spanned?, dStart: Int, dEnd: Int,
): CharSequence? {
if (cs == "") { // for backspace
return cs
}
return if (cs.toString().matches(reges)) {
cs
} else ""
}
}
)
  • 只需在 xml 文件中使用属性 android:inputType="text"

如果您希望用户提供电子邮件地址文本:

 <EditText
android:id="@+id/user_address"
android:inputType="textEmailAddress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

使用 android 工作室的自动完成功能,你可以随意检查许多其他的输入属性:

自动完成演示