在開發(fā)應(yīng)用的時候,經(jīng)常會限制用戶輸入的字數(shù),比如發(fā)表評論或者其它什么的,下面來個簡單的demo
EditText et_content;//定義一個文本輸入框<br>TextView tv_num;// 用來顯示剩余字數(shù)<br>int num = 10;//限制的最大字數(shù) <br>
et_content = (EditText) findViewById(R.id.et_content);<br>tv_num = (TextView) findViewById(R.id.tv_num); <br>tv_num.setText("10");<br>
下面為EditText文本框添加監(jiān)聽
et_content.addTextChangedListener(new TextWatcher() { private CharSequence temp; private int selectionStart; private int selectionEnd;
@Override public void onTextChanged(CharSequence s, int start, int before, int count) { temp = s; System.out.println("s="+s); }
@Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { }
@Override public void afterTextChanged(Editable s) { int number = num - s.length(); tv_num.setText("" + number); selectionStart = et_content.getSelectionStart(); selectionEnd = et_content.getSelectionEnd(); //System.out.println("start="+selectionStart+",end="+selectionEnd); if (temp.length() > num) { s.delete(selectionStart - 1, selectionEnd); int tempSelection = selectionStart; et_content.setText(s); et_content.setSelection(tempSelection);//設(shè)置光標在最后 } } });
這樣就可以實現(xiàn)了。
二.方法二: 利用EditText可以設(shè)置filter的特性,自定義一個LengthFilter,當(dāng)輸入字數(shù)超過限制時,做出自定義的提示 // 輸入框限制輸入字數(shù) 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()); } };
|