Android 之 设置EditText最大可输入字符

本文介绍了如何在Android应用中根据不同字符类型(如中文和英文)为EditText设置动态的输入字符限制,通过重写InputFilter类实现自定义长度过滤功能,以满足SIM卡电话本姓名字段等特定场景的需求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 中的EditText最大可输入字符数可以通过xml文件中为EditText设置maxLength属性或者在代码中为EditText设置LengthFilter来设置。

例如要设置EditText只能输入10个字符

xml中:

<EditText  android:layout_width = "fill_parent"
    android:layout_height = "wrap_content"
    android:id = "@+id/mEdit"
    android:maxLength = "10"/>

代码中:

EditText mEdit = (EditText)findViewById(R.id.mEdit);
InputFilter[] filters = {new LengthFilter(10)};
mEdit.setFilters(filters);

以上任意一种方法都可以满足需求,但这种方法只能为EditText设置统一的最大可输入字符,如果碰到根据实际情况限制不同的可输入字符数时,这种方法就不能用了。

比如SIM卡上的电话本姓名字段长度,纯英文下允许输入17个字符,而中文则只可以输入6个字符。此时可以重写InputFilter类来实现。

即:

EditText mEdit = (EditText)findViewById(R.id.mEdit);    	
InputFilter[] filters = {new AdnNameLengthFilter()};
mEdit.setFilters(filters);
public static class AdnNameLengthFilter implements InputFilter
	{
		private int nMax;

		public  CharSequence filter (CharSequence source, int start, int end, Spanned dest, int dstart, int dend)
		{
			Log.w("Android_12", "source("+start+","+end+")="+source+",dest("+dstart+","+dend+")="+dest);

			if(isChinese(dest.toString())|| isChinese(source.toString()))
			{
				nMax = LENGTH_ZNAME;
			}else
			{
				nMax =LENGTH_ENAME;
			}
			
	            int keep = nMax - (dest.length() - (dend - dstart));

	            if (keep <= 0) {
	                return "";
	            } else if (keep >= end - start) {
	                return null; // keep original
	            } else {
	                return source.subSequence(start, start + keep);
	            }
        
		}
	}

其中的isChinese函数是判断是否字符串中是否包含中文字符,具体实现方法就不再赘述了。

LENGTH_ZNAME : 是中文模式下允许输入的最大字符数。

LENGTH_ENAME:是纯英文模式下允许输入的最大字符数。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值