android 监听EditText 的变化

使用EditText的addTextChangedListener(TextWatcher watcher)方法对EditText实现监听,TextWatcher是一个接口类,所以必须实现TextWatcher里的抽象方法:

当EditText里面的内容有变化的时候,触发TextChangedListener事件,就会调用TextWatcher里面的抽象方法。

布局:

<?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" >
<EditText
    android:id="@+id/main_et"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
<TextView
    android:id="@+id/main_tv"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content" />
</LinearLayout>

一、实现监听文本框字数,提示还能输入多少个字符

MainActivity:

package chay.mian;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends Activity {

	private EditText editText;
	private TextView tip;
	private final int charMaxNum = 10; // 允许输入的字数

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

	private void init() {
		editText = (EditText) findViewById(R.id.main_et);
		editText.addTextChangedListener(new EditChangedListener());

		tip = (TextView) findViewById(R.id.main_tv);
		tip.setText("0/"+charMaxNum);
	}

	class EditChangedListener implements TextWatcher {
		private CharSequence temp; // 监听前的文本
		private int editStart; // 光标开始位置
		private int editEnd; // 光标结束位置

		// 输入文本之前的状态
		@Override
		public void beforeTextChanged(CharSequence s, int start, int count,int after) {
			temp = s;
		}

		// 输入文字中的状态,count是一次性输入字符数
		@Override
		public void onTextChanged(CharSequence s, int start, int before, int count) {
//			if (charMaxNum - s.length() <= 5) {
//				tip.setText("还能输入" + (charMaxNum - s.length()) + "字符");
//			}
			tip.setText((s.length()) + "/" + charMaxNum);
		}

		// 输入文字后的状态
		@Override
		public void afterTextChanged(Editable s) {
			/** 得到光标开始和结束位置 ,超过最大数后记录刚超出的数字索引进行控制 */
			editStart = editText.getSelectionStart();
			editEnd = editText.getSelectionEnd();
			if (temp.length() > charMaxNum) {
//				Toast.makeText(getApplicationContext(), "最多输入10个字符", Toast.LENGTH_SHORT).show();
				s.delete(editStart - 1, editEnd);
				editText.setText(s);
				editText.setSelection(s.length());
			}
		}
	};
}

二、数据类型检验,当输入不是整型数字的时候,会立刻弹出输入框,提示改正

MainActivity:

package chay.mian;

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;
import android.widget.TextView;

public class MainActivity extends Activity {

	private EditText editText;
	private TextView tip;
	String str;

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

	private void init() {
		editText = (EditText) findViewById(R.id.mian_et);
		editText.addTextChangedListener(new EditChangedListener());
		tip = (TextView) findViewById(R.id.mian_tv);
		tip.setText("请输入整型数字");
	}

	class EditChangedListener implements TextWatcher {

		// 输入文本之前的状态
		@Override
		public void beforeTextChanged(CharSequence s, int start, int count, int after) {
			Log.d("TAG", "beforeTextChanged--------------->");
		}

		// 输入文字中的状态,count是一次性输入字符数
		@Override
		public void onTextChanged(CharSequence s, int start, int before, int count) {
			Log.d("TAG", "onTextChanged--------------->");
		}

		// 输入文字后的状态
		@Override
		public void afterTextChanged(Editable s) {
			Log.d("TAG", "afterTextChanged--------------->");
			str = editText.getText().toString();
			try {
//				if ((editText.getText().toString()) != null)
					Integer.parseInt(str);
			} catch (Exception e) {
				showDialog();
			}
		}
	};

	private void showDialog() {
		AlertDialog dialog;
		AlertDialog.Builder builder = new AlertDialog.Builder(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();
	}
}

在LogCat查看调用这些方法的顺序:

beforeTextChanged-->onTextChanged-->onTextChanged

欢迎交流 http://blog.csdn.net/ycwol/article/details/46594275

时间: 2024-08-27 02:35:25

android 监听EditText 的变化的相关文章

【Android进阶学习】监听EditText的变化

之前博客上的有关EditText的文章,只是介绍EditText的一些最基本的用法,这次来深入学习一下EditText. 监听EditText的变化 使用EditText的addTextChangedListener(TextWatcher watcher)方法对EditText实现监听,TextWatcher是一个接口类,所以必须实现TextWatcher里的抽象方法: 当EditText里面的内容有变化的时候,触发TextChangedListener事件,就会调用TextWatcher里面

Android简易实战教程--第十九话《手把手教您监听EditText文本变化,实现抖动和震动的效果》

监听文本输入情况,仅仅限于土司略显low点,这一篇就稍微"高大上"些,体验一下滚动和震动. 首先,需要两个文件.截图: 两个文件的内容分别如下: cycle_7: <?xml version="1.0" encoding="utf-8"?> <!-- 表示循环的次数 --> <cycleInterpolator xmlns:android="http://schemas.android.com/apk/re

Android基础入门教程——3.5 监听EditText的内容变化

Android基础入门教程--3.5 监听EditText的内容变化 标签(空格分隔): Android基础入门教程 本节引言: 在前面我们已经学过EditText控件了,本节来说下如何监听输入框的内容变化! 这个再实际开发中非常实用,另外,附带着说下如何实现EditText的密码可见 与不可见!好了,开始本节内容! 1.监听EditText的内容变化 由题可知,是基于监听的事件处理机制,好像前面的点击事件是OnClickListener,文本内容 变化的监听器则是:TextWatcher,我们

android控件edittext-addTextChangedListener监听文本的变化

前言:edittext的addTextChangedListener监听事件用于监听edittext的输入文本的变化,他都用于密码框,或者那种检测用户输入过程中的变化. 1.使用方式   ①为edittext添加监听器 1 mEtPassword = (EditText) findViewById(R.id.id_et_password); 2 //添加监听器 3 mEtPassword.addTextChangedListener(new MyWatcher()); ②创建一个实现TextWa

android 监听网络状态的变化及实战

android 监听网络状态的变化及实际应用 转载请注明博客地址:http://blog.csdn.net/gdutxiaoxu/article/details/53008266 平时我们在请求错误的情况下,通常会进行处理一下,一般来说,主要分为两方面的错误 - 没有网络的错误 - 在有网络的情况下,我们客户端的错误或者服务器端的错误 今天这篇博客主要阐述以下问题 怎样监听网络状态的变化,包括是否打开WiFi,否打开数据网络,当前连接的网络是否可用 网络没有打开情况下的处理,如弹出对话框,跳转到

使用TextWatcher监听EditText变化

public class MainActivity extends AppCompatActivity { private TextView mTextView; private EditText mEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); m

&lt;Android&gt;监听软键盘打开收起事件(软键盘自带收起按钮)

最近在公司开发cocos2dx上的android输入框控件,遇到软键盘的事件监听,通常软键盘的收起方式大致3种: 1.点击软键盘右下角的Return按钮(系统收起) 2.输入框焦点时按返回按钮(系统收起) 3.点击软键盘和输入框的外部(自发收起) 4.点击软键盘自带的收起按钮(软键盘收起) 前三种事件可以监听,方式都比较简单 1.点击软键盘右下角的Return按钮 给输入框设置监听 editText.setOnEditorActionListener(new OnEditorActionList

Android 监听 Android中监听系统网络连接打开或者关闭的实现代码

本篇文章对Android中监听系统网络连接打开或者关闭的实现用实例进行了介绍.需要的朋友参考下 很简单,所以直接看代码 复制代码 代码如下: package xxx; import android.content.BroadcastReceiver;  import android.content.Context;  import android.content.Intent;  import android.net.ConnectivityManager;  import android.ne

Android 监听ListView、GridView滑动到底部

// 监听listview滚到最底部mIndexList.setOnScrollListener(new OnScrollListener() { @Override public void onScrollStateChanged(AbsListView view, int scrollState) { switch (scrollState) { // 当不滚动时 case OnScrollListener.SCROLL_STATE_IDLE: // 判断滚动到底部 if (view.get