android - 在 EditText 中只允许 1 个字符,并且在用户输入时始终覆盖

标签 android android-edittext textwatcher

我需要制作一个 EditText,它只接受一个字符,并且只接受一个字符(字母/字母)。如果用户输入其他字符,它应该替换现有字符(例如用 1 个允许的符号覆盖文本输入的方法)。

  1. 我知道如何在属性中设置文本的最大长度。但是如果我设置它 为 1,则在用户删除之前不能插入其他字符 现有的。但我想用新输入的替换现有的字符 一个自动无需手动删除。怎么做?

  2. 我知道如何设置属性以仅允许 EditText 中的数字,但我 无法弄清楚如何只允许字符。那么第二个问题是如何只允许EditText中的字符?

目前我正在使用最大文本大小为 2 的 EditText,代码如下:

final EditText editLetter = (EditText)findViewById(R.id.editHouseLetter); 
editLetter.addTextChangedListener(new TextWatcher() {

    public void afterTextChanged(Editable s) {
        if (s!=null && s.length()>1){
            editLetter.setText(s.subSequence(1, s.length()));
            editLetter.setSelection(1);
        }
    }

    public void beforeTextChanged(CharSequence s, int start, int count,
        int after) {

    }

    public void onTextChanged(CharSequence s, int start, int before,
        int count) {

    }
});

重点是,当用户输入第二个字符时,第一个字符应该被删除。将文本大小设置为 2 允许用户在输入一个字符后输入另一个字符。

我不太明白它是如何工作的,但确实如此:)。此外,我必须将 EditText 中的光标指向最后一个位置,因为它总是转到开头,这使得根本无法输入任何内容。也不明白这是为什么。

此解决方案的要点是它有一个 2 个字符大小的 EditText,但我想要它的大小为 1 个字符。它允许输入字母以外的任何内容(字符/字母),我只需要字符。

使用 sgarmanCharacter.isLetter() 函数提供的建议,afterTextChanged 方法现在看起来是这样的:

public void afterTextChanged(Editable s) {
    int iLen=s.length();
    if (iLen>0 && !Character.isLetter((s.charAt(iLen-1)))){
        s.delete(iLen-1, iLen);
        return;
    } 
    if (iLen>1){
        s.delete(0, 1);
    } 
}

我发现在这种情况下不需要使用 Selection.setSelection。现在它有一个过滤器,只允许输入字母。这几乎就是我想要的答案。剩下的唯一一件事就是如何对 1 个符号大小的 EditText 做同样的事情?

最佳答案

将以下行添加到您的布局 XML 文件 android:maxLength="1"

以下是将其添加到 editText 元素的示例:

<EditText
   android:id="@+id/editText1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:inputType="text"
   android:maxLength="1" >

我遇到了同样的问题并找到了这个更直接的解决方案。请引用这个blog了解更多详情。

编辑:请注意,我的答案是定义最大字符数,但是,它不会在用户输入时覆盖。

关于android - 在 EditText 中只允许 1 个字符,并且在用户输入时始终覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5558331/

相关文章:

安卓自定义ListView : adding search function

android - 如何在不回调 TextWatcher 监听器的情况下更改 DataChange 上的 TextView 文本

java - 仅在用户输入时设置 Editview 观察者?

java - kotlin com.google.gson.JsonSyntaxException : java. lang.IllegalStateException:预期为 BEGIN_OBJECT,但在第 1 行第 2 列路径 $ 处为 BEGIN_ARRAY

android - 寻找一个快速简单的等待命令

android - 如何在软键盘上添加菜单按钮

android - 使用两个不同的开发者名称发布 Google Play 应用

android - 单击以更新编辑文本字段时应用程序崩溃(从 TextWatcher 崩溃?)

Android:如何在编辑文本中设置密码属性?

android - 检测 EditText 的变化(TextWatcher 无效)