Android中EditText的字数的限制实现

先上代码:

import java.io.UnsupportedEncodingException;

import android.app.Activity;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;

/**
 * edittext监听器,用于限制字数,如果字数超过,则自动舍弃,并通过toast提示
 * 
 * @author kyson
 * 
 */
public class EditTextWatcher implements TextWatcher {

	private static final String TAG = "EditTextWatcher";

	private CharSequence temp;
	private int selectionStart;
	private int selectionEnd;
	// 字数限制
	private int range = 3;
	// 提示的信息
	private String infoString;
	private Activity mActivity;
	private EditText mEditText;

	// 构造函数
	public EditTextWatcher(Activity activity, EditText text) {
		super();

		this.mActivity = activity;
		this.mEditText = text;
	}

	// 设置toast提示信息
	public void setInfomation(String infoString, int range) {
		this.range = range;
		this.infoString = infoString;
	}

	public void onTextChanged(CharSequence s, int start, int before, int count) {
		// TODO Auto-generated method stub
		temp = s;
	}

	public void beforeTextChanged(CharSequence s, int start, int count, int after) {
		// TODO Auto-generated method stub
	}

	public void afterTextChanged(Editable s) {
		//for some reason , we should substract one
		int textLength = 0 ;
		try {
			//we should speciafy the encode ->gbk
			textLength = temp.toString().getBytes("gbk").length;
		} catch (UnsupportedEncodingException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
		if ( textLength > range) {
			selectionStart = mEditText.getSelectionStart();
			selectionEnd = mEditText.getSelectionEnd();
			// Toast.makeText(EditTextWatcher.this.mActivity, infoString,
			// Toast.LENGTH_SHORT).show();
			ToastUtils.show(EditTextWatcher.this.mActivity, infoString);
			s.delete(selectionStart - 1, selectionEnd);
			int tempSelection = selectionStart - 1;
			Log.v(TAG, "输入的信息为:" + s + "infoString" + infoString + "range:" + range);
			mEditText.setText(s);
			mEditText.setSelection(tempSelection);
		}

	}

}


郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。