Android的编辑框控件EditText在平常编程时会经常用到,有时候会对编辑框增加某些限制,如限制只能输入数字,最大输入的文字个数,不能输入一些非法字符等,这些需求有些可以使用android控件属性直接写在布局xml文件里,比如android:numeric="integer"(只允许输入数字);

对于一些需求,如非法字符限制(例如不允许输入#号,如果输入了#给出错误提示),做成动态判断更方便一些,而且容易扩展;

在Android里使用TextWatcher接口可以很方便的对EditText进行监听;TextWatcher中有3个函数需要重载:

 public void beforeTextChanged(CharSequence s, int start,
int count, int after);
public void onTextChanged(CharSequence s, int start, int before, int count);
public void afterTextChanged(Editable s);

从函数名就可以知道其意思,每当敲击键盘编辑框的文字改变时,上面的三个函数都会执行,beforeTextChanged可以给出变化之前的内容,onTextChanged和afterTextChanged给出追加上新的字符之后的文本;

所以对字符的限制判断可以在afterTextChanged函数中进行,如果检查到新追加的字符为认定的非法字符,则在这里将其delete掉,那么他就不会显示在编辑框里了:

private final TextWatcher mTextWatcher = new TextWatcher() {
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}

public void onTextChanged(CharSequence s, int start, int before, int count) {
}

public void afterTextChanged(Editable s) {
if (s.length() > 0) {
int pos = s.length() - 1;
char c = s.charAt(pos);
if (c == '#') {
//这里限制在字串最后追加#
s.delete(pos,pos+1);
Toast.makeText(MyActivity.this, "Error letter.",Toast.LENGTH_SHORT).show();
}
}
}
};

注册监听:

EditText mEditor = (EditText)findViewById(R.id.editor_input);
mEditor.addTextChangedListener(mTextWatcher);






更多相关文章

  1. C语言函数的递归(上)
  2. 【Java/Android性能优 6】Android(安卓)图片SD卡缓存 使用简单
  3. android ViewFlipper的使用
  4. Android8.0 图形引擎的心跳 - Vsync信号
  5. [Android学习笔记]资源(resources)的使用和重点
  6. Android(安卓)动画框架详解
  7. Android加载动态库不成功处理方法
  8. Android(安卓)JNI概述
  9. android DES 字符串加密后 解密乱码

随机推荐

  1. EditText去掉边框和隐藏光标
  2. android中表格绘图
  3. android进度条对话框小例子
  4. Android(安卓)CoordinatorLayout的使用—
  5. Android(安卓)PromptDialog example
  6. android 隐藏输入法
  7. Android根据URL下载文件保存到SD卡
  8. Android传感器使用
  9. Linaro android media create BUG
  10. Android(安卓)Popupwindow 点击外部消失