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 只允许字母(以编程方式)的主要内容,如果未能解决你的问题,请参考以下文章

Android添加边框以编程方式编辑文本

如何实现android EditText允许输入字母和数字,同时默认弹出数字键盘?

以编程方式滚动 EditText

无法以编程方式设置 EditText ID

以编程方式将 EditText 的背景资源设置为透明字段

检测 EditText 的内容是由用户更改还是以编程方式更改?