TextWatcher 用法详解

当我们需要对一个编辑框进行一定的限制,比如禁止输入某个字符,禁止错误的的格式等之类的操作时,就有必要用到EditText的时时监听,而TextWatcher就提供了这种功能。

详情请看下边的事例:

 1.    implements TextWatcher接口,重写相应的三个方法

 2..在  void  beforeTextChanged(CharSequence s, int start, int count,int after) {  }

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

         void   afterTextChanged(Editable s) {   }中做操作

3. 给你的EditText  添加监听   et_keyword.addTextChangedListener(new editListener());


例如,下边是一个只允许输入整型和浮点型数字的实例


android:inputType="numberDecimal"//默认调取数字键盘
 android:digits=".0123456789"//允许输入的字符

//由于已经在布局文件中对EditText设置了一定的属性限制

所以只能输入.0123456789等字符


public class MainActivity extends Activity {
EditText et_keyword;
Button go;
int scount;
int sstart;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        et_keyword = (EditText)findViewById(R.id.et_keyword);
        go = (Button)findViewById(R.id.go);
        et_keyword.addTextChangedListener(new editListener());
        go.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
//禁止最后一位为小数点  如:   300.  是错误格式,不允许提交
if(et_keyword.getText()!= null){
        String s = et_keyword.getText().toString().trim();
        if(".".equals(String.valueOf(s.charAt(s.length()-1)))){
        Toast.makeText(MainActivity.this, "请输入正确的数据格式", 1).show();
        }else{
        Toast.makeText(MainActivity.this, "成功", 1).show();
        }
       
     }
}
});
       
    }
    
    class editListener implements TextWatcher{


     /**This method is called to notify you that, within s, the count characters  
         * beginning at start are about to be replaced by new text with length after. 
         * 在s中,从start处开始的count个字符将要被长度为after的文本替代 
         * s 为变化前的内容; 
         * start 为开始变化位置的索引,从0开始计数; 
         * count 为将要发生变化的字符数   ,比如s由1变为12,count为0,由12变为1,count为1;
         * after 为用来替换旧文本的长度,比如s由1变为12,after为1,由12变为1,after为0; 
         */  


@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
}
  /** 
       * This method is called to notify you that, within s, the count characters 
       *  beginning at start have just replaced old text that had length before 
       *  在s中,从start处开始的count个字符刚刚替换了原来长度为before的文本 
       *  s 为变化后的内容; 
       *  start 为开始变化位置的索引,从0开始计数; 
       *  before 为被取代的老文本的长度,比如s由1变为12,before为0,由12变为1,before为1; 
       *  count 为将要发生变化的字符数 
       */ 
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
// TODO Auto-generated method stub
//此方法中可以把count理解为1为输入一个字符,0为删除一字符
scount = count;
sstart = start;
}
/** 
       * This method is called to notify you that, somewhere within s, the text has been changed. 
       */  
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
Log.e("@@", "afterTextChanged---"+s);
if(scount == 1){
//第一位禁止输入小数点
if(sstart == 0 && ".".equals(s.subSequence(sstart, sstart+1).toString())){
s.delete(sstart, sstart+1);
et_keyword.setText(s);
et_keyword.setSelection(s.length());
Toast.makeText(MainActivity.this, "请输入正确的数字格                           式!",Toast.LENGTH_SHORT).show();
}
}

}
   
    }

代码地址 :http://download.csdn.net/detail/userzhanghao123/7013163

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值