`

EditText输入限制setFilters

 
阅读更多

When reach max,pop up hint window:

private static String invalid_char[] ={"\\", "/", ":", "*", "?", "\"", "<", ">", "|", ";", "\n" };
private static Toast itoast = null;
private static Toast mtoast = null;

itoast = Toast.makeText(this, R.string.invalid_character, Toast.LENGTH_SHORT);
mtoast = Toast.makeText(this, R.string.max_char_reached_msg, Toast.LENGTH_SHORT);

editText.setFilters(getEditTextFilter());

static public InputFilter[] getEditTextFilter(){
		InputFilter[] FilterArray = new InputFilter[2];

		//add by dan.yin 11-12-6
		//limit the input length
		class SizeFilter implements InputFilter {
			private int mMax;

			public SizeFilter(int max) {
				mMax = max;
			}

			public CharSequence filter(CharSequence source, int start, int end,Spanned dest, int dstart, int dend) {
				int keep = mMax - (dest.length() - (dend - dstart));
				if (keep <= 0) {
					mtoast.cancel();
					mtoast.show();
					return "";
				} else if (keep >= end - start) {
					return null; 	
				} 
				else {
					return source.subSequence(start, start + keep);
				}
			}
		}
		FilterArray[0] = new SizeFilter(50);
		//FilterArray[0] = new InputFilter.LengthFilter(50);
		FilterArray[1] = new InputFilter() {
			public CharSequence filter(CharSequence source, int start, int end,
					Spanned dest, int dstart, int dend) {
				for(int i=0; i<invalid_char.length; i++){
					if(source.toString().indexOf(invalid_char[i]) >= 0){
						itoast.cancel();
						itoast.show();
						return "";
					}
				}
				return null;
			}			
		};
		return FilterArray;
    }


==========================another method============================================================

private Toast mToast = null;

//mPlaylist.setFilters(new InputFilter[]{new InputFilter.LengthFilter(30)}); //256
       
mPlaylist.setFilters(new InputFilter[] { new InputFilter() {
                                  @Override
                                  public CharSequence filter(CharSequence source,
                                                   int start, int end, Spanned dest,
                                                   int dstart, int dend) {
                                          int keep = 30 - (dest.length() - (dend - dstart));
                                          if (keep <= 0) {
                                                showToast(R.string.max_char_reached_msg);
                                                return "";
                                          } else if (keep >= end - start) {
                                                return null;
                                          }else {
                                                return source.subSequence(start, start + keep);
                                          }
                                   }
                      } });

private void showToast(int resId)
{
         if(mToast == null)
         {
                mToast = Toast.makeText(this, resId, Toast.LENGTH_SHORT);
         }
         else{
                mToast.cancel();
                mToast.setText(resId);
         }
         mToast.show();
}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics