将Android EditText扩展为限制字符长度

时间:2014-12-18 17:40:19

标签: android android-edittext maxlength

由于设置EditText.setMaxlength或通过过滤器没有做任何限制用户输入文本到特定长度的事情,我想我会扩展EditText并自己处理,但我遇到了Indexoutofbound异常。

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



 
import android.content.Context;
import android.text.Editable;
import android.util.AttributeSet;
import android.widget.EditText;

public class EditTextExtended extends EditText
{
	protected int maxTextLength = Integer.MAX_VALUE;
	protected int minTextLength = Integer.MIN_VALUE;
	private Boolean isTextChanged;

	public EditTextExtended(Context context, AttributeSet attributeSet)
	{
		super(context, attributeSet);
	}

	public void setMaximumTextLength(int value)
	{
		maxTextLength = value;
	}

	public void setMinimumTextLength(int value)
	{
		minTextLength = value;
	}

	@Override
	protected void onTextChanged(CharSequence charSequence, int start, int before, int after)
	{
		Editable userEnteredText = this.getText();

		if (this.getText().length() > maxTextLength)
		{
			String maximumAllowedCharacters = userEnteredText.toString().substring(0, maxTextLength);

			if (!isTextChanged)
			{
				isTextChanged = true;
				this.setText(maximumAllowedCharacters);
			}
		}
		super.onTextChanged(charSequence, start, before, after);
	}

}




我已将setMaximumTextLength设置为10.因此,当我输入第11个字符时,它会抛出带有IndexOutOfBoundsException的InvocationTrargetException,如下所示: enter image description here

所以,请告诉我一些关于我做错了什么的线索。顺便说一下,我在Android 5.0.1上构建了目标API 21。

2 个答案:

答案 0 :(得分:1)

假设您的edittext是在布局中定义的,您可以在那里进行

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

http://developer.android.com/reference/android/widget/TextView.html#attr_android:maxLength

答案 1 :(得分:1)

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

  1. 将您的minlength设置为某​​个点,假设为10。

  2. 只要输入长于minlength,就更改maxLength。

  3. *请注意,maxlenght将以编程方式定义 或者看一下这个主题click here