当用户试图插入文本的时间超过最大限制时,如何使Toast弹出?

<EditText
    android:maxLength="28"
    ...
 />

我试图使用TextWatcher但它不能正常工作:
public class MyActivity extends Activity implements TextWatcher
{

    // ...

    @Override
    public void afterTextChanged(Editable arg0){}

    @Override
    public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3){}

    @Override
    public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3)
    {
        if(etUsername.isFocused() && etUsername.getText().length() == 28)
            Toast.makeText(MyActivity.this, "The username must be at most 28 characters!" , Toast.LENGTH_SHORT).show();
        else if(etPassword.isFocused() && etPassword.getText().length() == 10)
            Toast.makeText(MyActivity.this, "The password must be at most 10 characters!" , Toast.LENGTH_SHORT).show();
    }
}

编辑:
我还试图将代码放入afterTextChangedbeforeTextChanged中,但这并不能解决问题。
编辑2:
我想要的是,只有当Toast中有28个字符并且用户试图添加第29个字符时,EditText才会弹出。只有当Toast中有27个字符并且用户插入第28个字符时,才会弹出上面“我的代码”中的TextEdit

最佳答案

实现所需功能的唯一方法是将android:maxLength更改为desiredMaxLength + 1并检查afterTextChanged()中的长度。当length==desiredMaxLength+1时,必须手动删除最后一个字符(即操作s中的afterTextChanged(Editable s)参数)。请注意不要将自己置于无限循环中,因为更改后将再次调用safterTextChanged()

09-25 21:45