方法一: mEditText.setFilters(new InputFilter[]{new InputFilter.LengthFilter(Constants.MAX_TEXT_INPUT_LENGTH)}); 方法二:這個方法雖然複雜點,但我更偏向使用這種方法。 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) 也不起作用 } } }; android editText 輸入字數限制2011-01-04 18:04
方法一: // 輸入框限制輸入字數 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); } }
});
方法二: 利用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()); } }; |
|
|