Android源码计算器:当输入到一定数,加减乘除一些数后,容易报错。
2.想在计算器的数字输入框中,加入限制最大输入数并提示。
用如下方法本来可以很轻意地解决此问题,但由于布局运用到了:CalculatorDisplay,其extends了ViewSwitcher,在lengthFilter需要用到参数:EditText,即输入框。由于对android源码计算器不熟,一时不知如何获取计算器输入框,后来发现通过CalculatorDisplay的getChildAt(1)可以取得。在onCreate调用如下lengthFilter方法,如:lengthFilter(this,(EditText)mDisplay.getChildAt(1),50,getResources().getString(R.string.most_char));可以解决
- publicstaticvoidlengthFilter(finalContextcontext,finalEditTexteditText,finalintmax_length,finalStringerr_msg){
- InputFilter[]filters=newInputFilter[1];
- filters[0]=newInputFilter.LengthFilter(max_length){
- @Override
- publicCharSequencefilter(CharSequencesource,intstart,intend,
- Spanneddest,intdstart,intdend){
- //TODOAuto-generatedmethodstub
- intdestLen=getCharacterNum(dest.toString());//获取字符个数(一个中文算2个字符)
- intsourceLen=getCharacterNum(source.toString());
- if(destLen+sourceLen>max_length){
- Toast.makeText(context,err_msg,Toast.LENGTH_SHORT).show();
- return"";
- }
- returnsource;
- }
- };
- editText.setFilters(filters);
- }
- /**
- *@description获取一段字符串的字符个数(包含中英文,一个中文算2个字符)
- *@paramcontent
- *@return
- */
- publicstaticintgetCharacterNum(finalStringcontent){
- if(null==content||"".equals(content)){
- return0;
- }else{
- return(content.length()+getChineseNum(content));
- }
- }
- /**
- *@description返回字符串里中文字或者全角字符的个数
- *@params
- *@return
- */
- publicstaticintgetChineseNum(Strings){
- intnum=0;
- char[]myChar=s.toCharArray();
- for(inti=0;i<myChar.length;i++){
- if((char)(byte)myChar[i]!=myChar[i]){
- num++;
- }
- }
- returnnum;
- }