如果将EditText的输入长度控制为N个字符,那有简单的两种方法:

1.在xml布局文件中对EditText添加android:maxLength="N";

 <EditText        android:id="@+id/et_test"        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:maxLength="16"        android:layout_centerInParent="true" />

2.也可以在代码中这样写

InputFilter[] filters = { new InputFilter.LengthFilter(16) };etTest.setFilters(filters);

这样做只能控制字符串长度,但项目中可能会遇到这样的需求,英文字母最多N个,而中文最多N/2个。这样的话直接用LengthFilter就无法实现了,但是我们可以通过自定义InputFilter实现:

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;@Overrideprotected 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;}@Overridepublic 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;}}}

demo源码就这样了,有更好的方法或者错的地方希望大家指出,共同进步!

更多相关文章

  1. make_ext4fs 文件权限控制
  2. Android(安卓)工具之androidscreencast
  3. android studio 更改 app 包名和包的长度
  4. android控制view的大小和位置(一)
  5. Android中的长度单位
  6. Android(安卓)Studio音乐播放器and视频播放器
  7. 输入框计数Demo
  8. 使用xml和java代码混合控制UI界面
  9. android ExpandableListActivity

随机推荐

  1. android手机端与PC端使用adb forword通信
  2. android dex工具打包Could not reserve e
  3. android 从Activity 获取 rootView 根节
  4. android:SQlite
  5. android修改当前窗口的亮度
  6. 使用Maven开发Android
  7. android ScrollView嵌套ListView,并且实现
  8. Android运行时权限策略和easyPermission
  9. Android中级教程之(二)----->Android(安卓)
  10. Android 使用MediaPlayer播放视频切换后