扩展Android EditText以限制字符长度

扩展Android EditText以限制字符长度,android,android-edittext,maxlength,Android,Android Edittext,Maxlength,由于设置EditText.setMaxlength或通过过滤器无法限制用户输入特定长度的文本,因此我想我会扩展EditText并自行处理,但我遇到了IndexOutofBond异常 这是我的代码,如果有人能给我指出正确的方向,我将不胜感激: 导入android.content.Context; 导入android.text.Editable; 导入android.util.AttributeSet; 导入android.widget.EditText; 公共类EditTextExtended

由于设置EditText.setMaxlength或通过过滤器无法限制用户输入特定长度的文本,因此我想我会扩展EditText并自行处理,但我遇到了IndexOutofBond异常

这是我的代码,如果有人能给我指出正确的方向,我将不胜感激:


导入android.content.Context;
导入android.text.Editable;
导入android.util.AttributeSet;
导入android.widget.EditText;
公共类EditTextExtended扩展了EditText
{
受保护的int maxTextLength=Integer.MAX_值;
受保护的int-minTextLength=Integer.MIN\u值;
私有布尔值发生了变化;
公共EditTextExtended(上下文上下文,属性集属性集)
{
super(上下文、属性集);
}
public void setMaximumTextLength(int值)
{
maxTextLength=值;
}
public void setMinimumTextLength(int值)
{
minTextLength=值;
}
@凌驾
受保护的void onTextChanged(CharSequence CharSequence、int start、int before、int after)
{
可编辑的userEnteredText=this.getText();
if(this.getText().length()>maxTextLength)
{
字符串maximumAllowedCharacters=userEnteredText.toString()子字符串(0,maxTextLength);
如果(!isTextChanged)
{
isTextChanged=true;
this.setText(最大允许字符数);
}
}
super.onTextChanged(charSequence、start、before、after);
}

}
假设您的编辑文本是在版面中定义的,您可以在版面中进行编辑

android:maxLength="10" // your required length here

首先从.xml中删除android:maxLength=“10”,然后执行以下操作:

  • 将minlength设置为某个点,假设为10

  • 只要输入长度大于minlength,就更改maxLength

  • *注意,maxlenght将以编程方式定义
    或者看看这个主题

    而不是覆盖
    onTextChanged
    在您的案例中,您应该覆盖
    posterextchanged
    。是的,在阅读了很多之后,才意识到在这种方法中,我们无法编辑文本而不崩溃。所以,我们必须使用TextWatcher来重写PostTextChanged方法。谢谢你,黑豹!我知道,但是android:maxLength=“10”不再像我在帖子中提到的那样工作了。我也尝试过使用代码设置过滤器,但用户仍然可以输入他们想要的字符,这最终会在同步期间中断后端。这是我认为在4.1中引入的Android bug…你也可以使用TextWatcher和AddTextChangeListener来实现这一点。你的更改可能还没有应用到该字段。如果使用charSequence而不是userEnteredText.toString()