监听EditText的变化--TextWatcher

转载 2012年03月28日 15:37:22

转自:http://liangruijun.blog.51cto.com/3061169/729505
监听EditText的变化
使用EditText的addTextChangedListener(TextWatcher watcher)方法对EditText实现监听,TextWatcher是一个接口类,所以必须实现TextWatcher里的抽象方法:

当EditText里面的内容有变化的时候,触发TextChangedListener事件,就会调用TextWatcher里面的抽象方法。
MainActivity.java
package com.lingdududu.watcher;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
public class MainActivity extends Activity {
private EditText text;
String str;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
text = (EditText)findViewById(R.id.text);
text.addTextChangedListener(textWatcher);
}
private TextWatcher textWatcher = new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
Log.d("TAG","afterTextChanged--------------->");
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
// TODO Auto-generated method stub
Log.d("TAG","beforeTextChanged--------------->");
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
Log.d("TAG","onTextChanged--------------->");
str = text.getText().toString();
try {
//if ((heighText.getText().toString())!=null)
Integer.parseInt(str);
} catch (Exception e) {
// TODO: handle exception
showDialog();
}
}
};
private void showDialog(){
AlertDialog dialog;
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle("消息").setIcon(android.R.drawable.stat_notify_error);
builder.setMessage("你输出的整型数字有误,请改正");
builder.setPositiveButton("确定", new DialogInterface.OnClickListener(){
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
dialog = builder.create();
dialog.show();
}
}
main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="请输入整型数字"
/>
<EditText
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
效果图:
当我们在输入框输入不是整型数字的时候,会立刻弹出输入框,提示你改正

在LogCat查看调用这些方法的顺序:
beforeTextChanged-->onTextChanged-->onTextChanged

第二个例子实现了提示文本框还能输入多少个字符的功能
package com.lingdududu.test;
import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends Activity {
private Button clearBtn;
private EditText et;
private TextView tv;
final int MAX_LENGTH = 20;
int Rest_Length = MAX_LENGTH;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
tv =(TextView)findViewById(R.id.tv);
et = (EditText)findViewById(R.id.et);
clearBtn = (Button)findViewById(R.id.btn);
et.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
tv.setText("还能输入"+Rest_Length+"个字");
}
@Override
public void afterTextChanged(Editable s) {
tv.setText("还能输入"+Rest_Length+"个字");
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(Rest_Length>0){
Rest_Length = MAX_LENGTH - et.getText().length();
}
}
});
clearBtn.setOnClickListener(new Button.OnClickListener() {
@Override
public void onClick(View v) {
et.setText("");
Rest_Length = MAX_LENGTH;
}
});
}
}
效果图:

使用TextWatcher监听EditText的文本变化之后动态改变EditText里面的内容

今天碰到一个这样的问题:使用TextWatcher对EditText进行监听,当EditText中值为某一特定内容时,将EditText中的值设为我们需要的那个值。一开始就是简单的在EditText中...
  • yanbin1079415046
  • yanbin1079415046
  • 2012年12月20日 17:53
  • 9128

Android EditText的TextWatcher监听回调参数详解

先贴代码 mEditText = (EditText) findViewById(R.id.edittext); mEditText.addTextChangedList...
  • zqq965774513
  • zqq965774513
  • 2016年06月28日 21:20
  • 565

EditText监听文字改变和焦点改变

实现效果: 需求分析:  1) 电话号码数字按照344进行分组,中间加空格 2) 点击删除按钮,输入框中内容为空 3) 监听输入框的焦点变化状况 ,获取焦点显示删除按钮,失去焦点隐藏输...
  • chenrushui
  • chenrushui
  • 2016年07月28日 16:21
  • 1589

最强理解:Android对EditText输入时设置监听即TextWatcher的用法

最强理解:Android对EditText输入时设置监听即TextWatcher的用法有时我们需要对EditText输入时设置监听,比如对EditText进行格式控制(一般用正则表达式),判断输入的内...
  • CherishTender
  • CherishTender
  • 2016年07月21日 14:39
  • 2763

关于android的EditText的监听接口TextWatcher——调色盘例子

在做调色盘的例子时,除了通过按钮点击“+”和“-”来改变rgb的值,还需要能够直接改变EditText的值来调颜色,这个时候需要用到EditText的监听接口TextWatcher。 因为要同时...
  • interaction_123
  • interaction_123
  • 2017年03月20日 16:49
  • 569

详解EditText输入监听TextWatcher

日常开发中,我们可能会遇到需要监听EditText输入,比如判断输入是否为电话号码,获取输入的数据长度来限定字数等。这就需要监听EditText的输入状态。EditText使用TextWatcher实...
  • Z_DingHao
  • Z_DingHao
  • 2017年03月18日 18:18
  • 927

android中实现对多个EditText的监听

在android应用中如果要对多个EditText控件进行监听的话,比如说:输入用户名和...
  • du412983021
  • du412983021
  • 2014年11月04日 14:26
  • 4108

关于使用EditText的监听器容易引起死循环的问题

实习期间在使用EditText的addTextChangedListener(new TextWatcher())方法时(即给EditText增加监听器)后,遇到了死循环,前天又遇到了同样的问题,可见...
  • li_huorong
  • li_huorong
  • 2016年04月14日 13:50
  • 1065

EditText绑定TextWatcher后处理事件卡顿

今天遇到一个问题,需要监听EditText中的内容变化,当编辑框内的内容清空时加载网络数据,自然而言会在afterTextChanged方法中执行我的对应逻辑,但是遇到了一个问题,当我的内容变化时,U...
  • jdfkldjlkjdl
  • jdfkldjlkjdl
  • 2017年06月21日 00:17
  • 594

Android:EditText动态输入监听TextWatcher

我们经常看到类似于必须等到姓名,密码都输入有内容,登录按钮才会可点击的功能 代码实现就是用到TextWatcher 下面我们监听两个 EditText etLoginname,etLoginpwd...
  • abfdada
  • abfdada
  • 2016年08月09日 16:07
  • 1421
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:监听EditText的变化--TextWatcher
举报原因:
原因补充:

(最多只允许输入30个字)