欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

EditText增加字数限制

程序员文章站 2022-05-14 08:03:04
...

方法一、在xml中添加属性限制字符长度

实现1.android:maxLength=“10”

直接对EditText的字数进行控制。不管中文还是英文。

<EditText
        android:layout_width="380dp"
        android:layout_height="210dp"
        android:maxLength="10" />
实现2.android:maxEms=“10”

设置控件的宽度为最长为N个字符的宽度
无法精确的控制(无法达到我们需要的要求)

<EditText
        android:layout_width="380dp"
        android:layout_height="210dp"
        android:maxEms="10" />

方法二、Java代码中使用InputFilter输入过滤器

一、效果图

EditText增加字数限制

二、简单使用

/**
 * @params max 字数限制
*/
editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(50)});  

对拦截的处理

重写InputFilter.LengthFilter的filter方法处理拦截

editText.setFilters(
	new InputFilter[]{
		 new InputFilter.LengthFilter(50) {
		 	@Override
			public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
				CharSequence charSequence = super.filter(source, start, end, dest, dstart, dend);
				if (charSequence == null) 
					return null;
				if (!TextUtils.equals(charSequence, source)) {
                	Toast.makeText(ChangeIntroductionActivity.this, "最多支持50字", Toast.LENGTH_SHORT).show();
				}
				return charSequence;
			}
		}
	}
);

方法三、通过监听EditText的输入字符的事件

EditText添加文字改变监听事件

mEditText.addTextChangedListener(new TextWatcher() {
    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        int editStart = mEditText.getSelectionStart();
        int editEnd = mEditText.getSelectionEnd();
        while (calculateLength(s.toString()) > 20) {
            // 当输入字符个数超过限制的大小时,进行截断操作
            ((Editable) s).delete(editStart - 1, editEnd);
            editStart--;
            editEnd--;
        }
    }

    @Override
    public void afterTextChanged(Editable s) {
    }
});

计算字符串的长度

private long calculateLength(CharSequence c) {
    double len = 0;
    for (int i = 0; i < c.length(); i++) {
        int tmp = (int) c.charAt(i);
        if (tmp > 0 && tmp < 127) {
            len += 0.5;
        } else {
            len++;
        }
    }
    return Math.round(len);
}
相关标签: Android基础