安卓:EditText中字符数量有限制

3
I希望允许用户在EditText中输入最多10个字符。我尝试了两种方法。

方法1:

android:maxLength="10"

方法二:
我使用了InputFilter类。
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(10)});

当我使用这些方法时,光标停留在10处,没有更多的字符可见。然而,它仍然接受我在这10个字符之后输入的字符。我可以在键盘上方的建议区域中看到它们。为了清楚地解释,让我举个例子。
假设我输入了“abcdefghij”,它可以正常工作。现在,假设我输入了“abcdefghijklm”,我只能在EditText中看到前10个字符,但是当我按下退格键时,它会删除最后一个字符“m”,而不是删除在EditText中可见的最后一个字符“j”。
我该如何解决这个问题?我不想保留缓冲区中的额外字符。因此,当用户按下退格键时,它应该删除第10个字符。

+1,我也在寻找类似的东西。 - nobalG
2个回答

1
你可以使用 edittext.addTextChangedListener
editTextLimited.addTextChangedListener(new TextWatcher() {
    /** flag to prevent loop call of onTextChanged() */
    private boolean setTextFlag = true;

    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub

    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        // add your code here something like this
        if(count > 10){
            Toast.makeText(context,"10 chars allowed",Toast.LENGTH_LONG).show();

            // set the text to a string max length 10:
            if (setTextFlag) {
                setTextFlag = false;
                editTextLimited.setText(s.subSequence(0, 10));
            } else {
                setTextFlag = true;
            }
        }
    } 

});

2
只是一个小提示:使用 count >= 10。考虑到有人可能会将长度超过10的文本粘贴到 EditText 中。您仍然希望捕获这种情况。 - WarrenFaith
1
我还编辑了代码,以满足当文本超过10个字符时将其限制为10个字符的要求 - 灵感来源:https://dev59.com/pmDVa4cB1Zd3GeqPfKBy - WarrenFaith

0

您的问题应通过将以下内容添加到您的 EditText 中来解决:

android:inputType="textFilter"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接