修改Android源码计算器——输入框最大输入数提示


1.       Android源码计算器:当输入到一定数,加减乘除一些数后,容易报错。

2.       想在计算器的数字输入框中,加入限制最大输入数并提示。

用如下方法本来可以很轻意地解决此问题 ,但由于布局运用到了:CalculatorDisplay,其extendsViewSwitcher,在lengthFilter 需要用到参数:EditText,即输入框。由于对android源码计算器不熟,一时不知如何获取计算器输入框,后来发现通过CalculatorDisplaygetChildAt1)可以取得。在onCreate调用如下lengthFilter方法,如:lengthFilter(this,(EditText)mDisplay.getChildAt(1),50,getResources().getString(R.string.most_char));  可以解决

  1. public static void lengthFilter(final Context context, final EditText editText, final int max_length, final String err_msg) {  
  2.   
  3.         InputFilter[] filters = new InputFilter[1];  
  4.   
  5.         filters[0] = new InputFilter.LengthFilter(max_length) {  
  6.   
  7.             @Override  
  8.             public CharSequence filter(CharSequence source, int start, int end,  
  9.                     Spanned dest, int dstart, int dend) {  
  10.                 // TODO Auto-generated method stub   
  11.                   
  12.                 int destLen = getCharacterNum(dest.toString()); //获取字符个数(一个中文算2个字符)   
  13.                 int sourceLen =  getCharacterNum(source.toString());   
  14.                 if (destLen + sourceLen > max_length) {  
  15.                 Toast.makeText(context, err_msg,Toast.LENGTH_SHORT).show();  
  16.                 return "";  
  17.                 }  
  18.                 return source;  
  19.                   
  20.             }  
  21.   
  22.         };  
  23.           
  24.         editText.setFilters(filters);  
  25.   
  26.         }  
  27.       
  28.         /** 
  29.          * @description 获取一段字符串的字符个数(包含中英文,一个中文算2个字符) 
  30.          * @param content 
  31.          * @return 
  32.          */  
  33.         public static int getCharacterNum(final String content) {  
  34.         if (null == content || "".equals(content)) {  
  35.         return 0;  
  36.         }else {  
  37.         return (content.length() + getChineseNum(content));  
  38.         }  
  39.         }  
  40.       
  41.       
  42.       
  43.       
  44.         /** 
  45.         * @description 返回字符串里中文字或者全角字符的个数 
  46.         * @param s  
  47.         * @return 
  48.         */  
  49.         public static int getChineseNum(String s) {  
  50.       
  51.         int num = 0;  
  52.         char[] myChar = s.toCharArray();  
  53.         for (int i = 0; i < myChar.length; i++) {  
  54.         if ((char)(byte)myChar[i] != myChar[i]) {  
  55.         num++;  
  56.         }  
  57.         }  
  58.         return num;  
  59.         }  

更多Android相关信息见Android 专题页面 http://www.bkjia.com/topicnews.aspx?tid=11

相关内容