在开发应用的时候,经常会限制用户输入的字数,比如发表评论或者其它什么的,下面来个简单的demo
EditText et_content;//定义一个文本输入框<br>TextView tv_num;// 用来显示剩余字数<br>int num = 10;//限制的最大字数 <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文本框添加监听
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);//设置光标在最后 } } });
这样就可以实现了。
二.方法二: 利用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()); } };
|