Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> android 監聽EditText 的變化

android 監聽EditText 的變化

編輯:關於Android編程

使用EditText的addTextChangedListener(TextWatcher watcher)方法對EditText實現監聽,TextWatcher是一個接口類,所以必須實現TextWatcher裡的抽象方法:
\
當EditText裡面的內容有變化的時候,觸發TextChangedListener事件,就會調用TextWatcher裡面的抽象方法。
布局:


 
 
一、實現監聽文本框字數,提示還能輸入多少個字符
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
\

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved