方法一:
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()); } };
|
|