EditText输入字符控制(二)

来源:互联网 发布:爱思唯尔数据库英文 编辑:程序博客网 时间:2024/05/22 16:46

除了对EditText设置filter外(请察看EditText输入字符数控制),还可以通过TextWatcher去观察输入框中输入的内容,从而对EditText输入的内容进行控制。

package com.demos.edittext;import android.app.Activity;import android.os.Bundle;import android.text.Editable;import android.text.TextWatcher;import android.util.Log;import android.widget.EditText;import android.widget.TextView;import android.widget.Toast;import com.demos.activity.R;public class EditTextDemo extends Activity {EditText mEditText;TextView mTextView;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.edittextdemos);mTextView = (TextView) findViewById(R.id.tv);mEditText = (EditText) findViewById(R.id.et);mEditText.addTextChangedListener(mTextWatcher);}TextWatcher mTextWatcher = new TextWatcher() { private CharSequence temp;        private int editStart ;        private int editEnd ;        private int max = 10;                        @Override        public void beforeTextChanged(CharSequence s, int arg1, int arg2,                int arg3) {            temp = s;        }               @Override        public void onTextChanged(CharSequence s, int arg1, int arg2,                int arg3) {            mTextView.setText(s);        }               @Override        public void afterTextChanged(Editable s) {            editStart = mEditText.getSelectionStart();            editEnd = mEditText.getSelectionEnd();            Log.e("editStart", editStart+"");            Log.e("editEnd", editEnd+"");                        int count = countChinese(temp.toString());                        if ((temp.length() + count) > max) {                Toast.makeText(EditTextDemo.this,                        "你输入的字数已经超过了限制!", Toast.LENGTH_SHORT)                        .show();                s.delete(editStart-1, editEnd);                int tempSelection = editStart;                mEditText.setText(s);                mEditText.setSelection(tempSelection);            }        }    };        /** * 计算字符串中中文字符数 * @param strName * @return */int countChinese(String strName){int count = 0;char[] ch = strName.toCharArray();for (int i = 0; i < ch.length; i++) {char c = ch[i];if (isChinese(c)) {count ++;}}return count;}private static final boolean isChinese(char c) {Character.UnicodeBlock ub = Character.UnicodeBlock.of(c);if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION|| ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS) {return true;}return false;}}



原创粉丝点击