android 关于EditText中关于输入字数的控制

 

计算输入的字数:

declareView.addTextChangedListener(new DeclareTextWatcher());

设置一个当输入框改变时触发的事件

View Code
 1 class DeclareTextWatcher implements TextWatcher {
2 @Override
3 public void onTextChanged(CharSequence s, int start, int before,
4 int count) {
5
6 }
7
8 @Override
9 public void beforeTextChanged(CharSequence s, int start, int count,
10 int after) {
11 }
12
13 @Override
14 public void afterTextChanged(Editable s) {
15 TextView t = (TextView) findViewById(R.id.cr);
16 t.setText(String.valueOf(s.length()));
17 // 输入字数的控制
18 if (s.length() >= 500) {
19 Toast.makeText(ShowShopping.this.getApplicationContext(),
20 "输入字数已满!", Toast.LENGTH_SHORT).show();
21 declareView.setFilters(new InputFilter[] { new InputFilter() {
22 public CharSequence filter(CharSequence source, int start,
23 int end, Spanned dest, int dstart, int dend) {
24 return source.length() < 1 ? dest.subSequence(dstart,
25 dend) : "";
26 }
27 } });
28 }
29 }
30 }

  熟悉android中的EditText组件都知道当设置 android:editable为false时还是一样可以输入,那么必须filter来设置文本框的输入,利用setFilter()方法来控制

View Code
 1  declareView.setFilters(new InputFilter[] { new InputFilter() {
2 public CharSequence filter(CharSequence source, int start,
3 int end, Spanned dest, int dstart, int dend) {
4
5 //return 下面时则不可以继续输入
6 return source.length() < 1 ? dest.subSequence(dstart,
7 dend) : "";
8
9 //retrurn null;则不可以继续输入
10 }
11 } });
12
13

 当输入到了规定的字数时就设置上面的filter ,但是此时应该可以输入退格键,所以declare还必须设置一个键盘事件监听,当输入是退格键时则上面的filter返回null

 

View Code
 1 declareView.setOnKeyListener(new OnKeyListener() {
2 @Override
3 public boolean onKey(View v, int keyCode, KeyEvent event) {
4 if (keyCode == KeyEvent.KEYCODE_DEL) {
5 declareView
6 .setFilters(new InputFilter[] { new InputFilter() {
7 public CharSequence filter(CharSequence source,
8 int start, int end, Spanned dest,
9 int dstart, int dend) {
10 return null;
11 }
12 } });
13 }
14 return false;
15 }
16 });

 

posted @ 2011-10-15 15:48  奶酪@橙汁  阅读(621)  评论(0)    收藏  举报