文档章节

关于EditText的android:maxLength属性的注意事项

mutouzhang
 mutouzhang
发布于 2014/03/19 20:09
字数 361
阅读 5751
收藏 0

一直以为在xml布局文件中对EditText添加 android:maxLength="30";属性是控制EditText字符数的。想当然的以为一个中文占2个字符,一个英文占1个字符。结果的结果当然不是了。

确切的说来android:maxLength="30"是对EditText的字数进行控制的。不管中文还是英文。都是30个字。这下麻烦了,查了整个API就没发现有真正是对字符进行控制的。最后发现只能用自定义的InputFilter来实现。

下面附上源代码:由Jerome_Song提供:http://blog.csdn.net/songzhiyong1121/article/details/8758902

package com.example.inputfilterdemo;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

/**
 * 
 * ClassName:MainActivity
 * 
 * @author Jerome Song
 * @version
 * @since Ver 1.1
 * @Date 2013 2013-4-4 下午2:55:42
 * 
 * @see
 */
public class MainActivity extends Activity {

	private EditText etTest;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		init();
	}

	private void init() {
		etTest = (EditText) findViewById(R.id.et_test);
		InputFilter[] filters = { new NameLengthFilter(16) };
		etTest.setFilters(filters);
	}

	private class NameLengthFilter implements InputFilter {
		int MAX_EN;// 最大英文/数字长度 一个汉字算两个字母
		String regEx = "[\\u4e00-\\u9fa5]"; // unicode编码,判断是否为汉字

		public NameLengthFilter(int mAX_EN) {
			super();
			MAX_EN = mAX_EN;
		}

		@Override
		public CharSequence filter(CharSequence source, int start, int end,
				Spanned dest, int dstart, int dend) {
			int destCount = dest.toString().length()
					+ getChineseCount(dest.toString());
			int sourceCount = source.toString().length()
					+ getChineseCount(source.toString());
			if (destCount + sourceCount > MAX_EN) {
				Toast.makeText(MainActivity.this, getString(R.string.count),
						Toast.LENGTH_SHORT).show();
				return "";

			} else {
				return source;
			}
		}

		private int getChineseCount(String str) {
			int count = 0;
			Pattern p = Pattern.compile(regEx);
			Matcher m = p.matcher(str);
			while (m.find()) {
				for (int i = 0; i <= m.groupCount(); i++) {
					count = count + 1;
				}
			}
			return count;
		}
	}

}


本文转载自:http://blog.csdn.net/geekpark/article/details/11615473

mutouzhang
粉丝 6
博文 190
码字总数 91235
作品 0
洛阳
程序员
私信 提问
EditText的一些常用功能的介绍

一:新建HelloEditText工程 新建一个Hello world详细步骤可以参见 Android教程之三:第一个Android应用,HelloWorld 创建设置如下: Project name: HelloEditText Build Target :android 2....

yuwentao
2012/04/19
777
0
EditText 集锦 - 开发中常用的用法及遇到的各种坑

前言 EditText ,文本输入框,一个再熟悉不过的的控件,在开发当中,我们需要经常用到。这边文章,主要是记录 EditText 的常用用法,需要的时候可以直接复制张贴,提高效率。同时,本文章会持...

xujun9411
02/21
0
0
Android开发之EditText属性详解

1、EditText输入的文字为密码形式的设置 (1)通过.xml里设置: 把该EditText设为:android:password="true" // 以”.”形式显示文本 (2)在代码里设置: 通过设置EditText的setTransformation...

的书法上的
2014/07/28
266
0
实现4个数字一组分隔显示的数字输入框

前言 很悲剧,对于输入框而言,有时我们不得不实现几个数字后就出现一个空格的情况,这是为了方便用户观察。那么今天就讲讲这中输入框CrEditText的实现吧。 今天涉及内容: 原理分析 CrEdit...

奔跑的佩恩
2018/07/25
0
0
AutocompleteTextView 弹出背景

<AutoCompleteTextView android:id="@+id/inputcityname" android:layoutwidth="wrapcontent" android:layoutheight="wrapcontent" android:hint="@string/cityselecthint" android:gravity=......

塔塔米
2014/04/22
223
0

没有更多内容

加载失败,请刷新页面

加载更多

Eureka应用注册与集群数据同步源码解析

在之前的EurekaClient自动装配及启动流程解析一文中我们提到过,在构造DiscoveryClient类时,会把自身注册到服务端,本文就来分析一下这个注册流程 客户端发起注册 boolean register() t...

Java学习录
15分钟前
4
0
Java描述设计模式(15):责任链模式

本文源码:GitHub·点这里 || GitEE·点这里 一、生活场景描述 1、请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批当 3<day<=5 天,部门经理审批当 day>5 天...

知了一笑
26分钟前
4
0
总结:数组与链表

1、内存申请:数组在内存上是连续的空间;链表,内存地址上可以是不连续的。 2、查询速度:数组可以随机访问,链表必须顺序访问,即从首个元素开始遍历,逐个查找,所以数组查询很快。 3、写入...

浮躁的码农
34分钟前
6
0
HashMap源码分析

read

V丶zxw
53分钟前
5
0
Python字符串或JSON字符串转字典dict、列表list

有3种方法 1、使用ast模块 >>> import ast>>> s = '["test",1]'>>> ast.literal_eval(s)['test',1]>>> s = '{"test":1}'>>> ast.literal_eval(s){'test': 1} 2、eval函数,这个......

编程老陆
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部