Edittext 只允许字母(以编程方式)
Posted
技术标签:
【中文标题】Edittext 只允许字母(以编程方式)【英文标题】:Edittext only allow letters (programmatically) 【发布时间】:2019-07-26 22:06:09 【问题描述】:我正在尝试获得一个只允许字母(小写和大写)的editTextview。
它适用于以下代码:
edittv.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"));
问题是我得到一个像这样的数字键盘:
要回到普通键盘,我发现了这段代码:
edittv.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"));
edittv.setInputType(InputType.TYPE_CLASS_TEXT);
它适用于恢复键盘但随后再次允许所有字符,因此它撤消了之前的代码。
那么,我怎样才能以编程方式只允许带有字母键盘的字母。
【问题讨论】:
如果我切换它们,那么再次只允许字母,这很好,但我又得到了一个数字键盘。 @DaanSeuntjens 我更新了我的答案,请检查.. 【参考方案1】:您可以使用以下代码:
InputFilter filter = new InputFilter()
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend)
for (int i = start; i < end; i++)
if (!Character.isLetter(source.charAt(i))&&!Character.isSpaceChar(source.charAt(i)))
return "";
return null;
;
edit.setFilters(new InputFilter[] filter );
【讨论】:
【参考方案2】:在这里,您使用的是 DigitsKeyListener
extends NumberKeyListener
,它只允许数字,这就是您收到该错误的原因。
这是我的解决方案,可满足您的要求,在您的 XML 中使用此行。
<EditText
android:id="@+id/edt_username"
android:layout_
android:layout_
android:hint="Username"
android:digits="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ "/>
注意:- 数字末尾有空格,让用户也可以输入空格
以编程方式:-
edittv.setInputType(InputType.TYPE_CLASS_TEXT);
edittv.setFilters(new InputFilter[]
new InputFilter()
public CharSequence filter(CharSequence src, int start,
int end, Spanned dst, int dstart, int dend)
if (src.equals(""))
return src;
if (src.toString().matches("[a-zA-Z ]+"))
return src;
return "";
);
【讨论】:
文本视图是使用代码动态创建的,因此不能选择使用 xml。 这似乎是正确的,但我会检查@bhumilvyas 的答案,因为他是第一个使用 setFilter 的答案。我赞成你,因为它也是一个正确的答案,希望你能理解。以上是关于Edittext 只允许字母(以编程方式)的主要内容,如果未能解决你的问题,请参考以下文章