读书人

Android-3类方式限制EditView输入字数

发布时间: 2012-08-17 02:08:34 作者: rapoo

Android---3种方式限制EditView输入字数

方法一:利用TextWatcher


editText.addTextChangedListener(new TextWatcher() {??
?????????? private CharSequence temp;??
?????????? private boolean isEdit = true;??
?????????? private int selectionStart ;??
?????????? private int selectionEnd ;??
?????????? @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) {??
?????????? }??
?????????????
?????????? @Override?
?????????? public void afterTextChanged(Editable s) {??
??????????????? selectionStart = editText.getSelectionStart();??
?????????????? selectionEnd = editText.getSelectionEnd();??
?????????????? Log.i("gongbiao1",""+selectionStart);??
?????????????? if (temp.length() > Constant.TEXT_MAX) {??
?????????????????? Toast.makeText(KaguHomeActivity.this,??
?????????????????????????? R.string.edit_content_limit, Toast.LENGTH_SHORT)??
?????????????????????????? .show();??
?????????????????? s.delete(selectionStart-1, selectionEnd);??
?????????????????? int tempSelection = selectionStart;??
?????????????????? editText.setText(s);??
?????????????????? editText.setSelection(tempSelection);??
?????????????? }??
?????????? }??
?
?
?????? });?

?private TextWatcher mTextWatcher = new TextWatcher(){
??Toast mToast = null;
??public void beforeTextChanged(CharSequence s, int start,
????int count,int after) {
??}

??public void onTextChanged(CharSequence s, int start,
????int before,int count) {
??}
??
??public void afterTextChanged(Editable s) {
???int nSelStart = 0;
???int nSelEnd = 0;
???boolean nOverMaxLength = false;
???
???nSelStart = mEditText.getSelectionStart();
???nSelEnd?? = mEditText.getSelectionEnd();
???
???nOverMaxLength = (s.length() > Constants.MAX_TEXT_INPUT_LENGTH) ? true : false;
???if(nOverMaxLength){
????if(null == mToast){
?????mToast = Toast.makeText(mContext,
???????R.string.IDS_MSG_TEXT_OVER_MAXLENGTH,
???????Toast.LENGTH_SHORT);
????}
????mToast.show();
????
????s.delete(nSelStart - 1, nSelEnd);

????mEditText.setTextKeepState(s);//请读者注意这一行,保持光标原先的位置,而 mEditText.setText(s)会让光标跑到最前面,

???????????????????????????????????????????????????? //就算是再加mEditText.setSelection(nSelStart)?也不起作用
????}
??}
?};

方法二:利用InputFilter

????


editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(100)});? //其中100最大输入字数?

editText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(100)});? //其中100最大输入字数

方法三:在XML中设定

Xml代码
<EditText?
??? .??
??? .??
??? .??
??? Android:maxLength="100"?
/>?

?

=========================================================

方法二:
???????? 利用EditText可以设置filter的特性,自定义一个LengthFilter,当输入字数超过限制时 ,做出自定义的提示
????????? // 输入框限制输入字数
??? ??? InputFilter[] filters = new InputFilter[1];
??? ??? filters[0] = new InputFilter.LengthFilter(Constant.TEXT_MAX) {
??? ??? ??? @Override
??? ??? ??? public CharSequence filter(CharSequence source, int start, int end,
??? ??? ??? ??? ??? Spanned dest, int dstart, int dend) {
??? ??? ??? ??? if (source.length() > 0 && dest.length() == Constant.TEXT_MAX) {
??? ??? ??? ??? ??? if ((System.currentTimeMillis() - toastTime) > interval) {
??? ??? ??? ??? ??? ??? toastTime = System.currentTimeMillis();
??? ??? ??? ??? ??? ??? Toast
??? ??? ??? ??? ??? ??? ??? ??? .makeText(KaguHomeActivity.this,
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? R.string.edit_content_limit,
??? ??? ??? ??? ??? ??? ??? ??? ??? ??? Toast.LENGTH_SHORT).show();
??? ??? ??? ??? ??? }
??? ??? ??? ??? }
??? ??? ??? ??? if (dest.toString().equals(
??? ??? ??? ??? ??? ??? getResources().getString(R.string.input_default_txt))) {
??? ??? ??? ??? ??? Bundle data = new Bundle();
??? ??? ??? ??? ??? data.putCharSequence("source", source);
??? ??? ??? ??? ??? Message message = textHandler.obtainMessage();
??? ??? ??? ??? ??? message.setData(data);
??? ??? ??? ??? ??? message.sendToTarget();
??? ??? ??? ??? }

??? ??? ??? ??? return super.filter(source, start, end, dest, dstart, dend);
??? ??? ??? }
??? ??? };
??? ??? editText.setFilters(filters);
private Handler textHandler = new Handler() {
??? ??? @Override
??? ??? public void handleMessage(Message msg) {

??? ??? ??? Bundle data = msg.getData();
??? ??? ??? CharSequence source = data.getCharSequence("source");
??? ??? ??? editText.setTextColor(Color.BLACK);
??? ??? ??? editText.setText(source);
??? ??? ??? editText.setSelection(source.length());
??? ??? }
??? };
=============================================================

转自:http://dev.10086.cn/cmdn/wiki/index.php?doc-view-4066.html

读书人网 >Android

热点推荐