EditText增加字数限制

方法一、在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输入过滤器

一、效果图

在这里插入图片描述

二、简单使用
/**
 * @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);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值