【问题标题】:Edittext only allow letters (programmatically)Edittext 只允许字母(以编程方式)
【发布时间】:2019-07-26 22:06:09
【问题描述】:

我正在尝试获得一个只允许字母(小写和大写)的editTextview。

它适用于以下代码:

 edittv.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"));

问题是我得到一个像这样的数字键盘:

要回到普通键盘,我发现了这段代码:

edittv.setKeyListener(DigitsKeyListener.getInstance("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"));
edittv.setInputType(InputType.TYPE_CLASS_TEXT);

它适用于恢复键盘但随后再次允许所有字符,因此它撤消了之前的代码。

那么,我怎样才能以编程方式只允许带有字母键盘的字母。

【问题讨论】:

  • 如果我切换它们,那么再次只允许字母,这很好,但我又得到了一个数字键盘。
  • @DaanSeuntjens 我更新了我的答案,请检查..

标签: java android android-edittext keyboard


【解决方案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_width="match_parent"
            android:layout_height="wrap_content"
            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 的答案。我赞成你,因为它也是一个正确的答案,希望你能理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-24
    • 2014-04-11
    • 2021-02-07
    • 2011-12-29
    • 1970-01-01
    相关资源
    最近更新 更多