android中自带计算器按.格式显示错误问题

原创 2016年08月31日 16:31:42

在开发中遇到的关于android手机自带计算器显示格式纠正问题

此问题修改的文件路径:alps/packages/apps/Calculator/src/com/android/calculator2/CalculatorExpressionBuilder.java

replace()方法中做修改:

在switch循环后加入如下代码

        if(expr.length()>0){
        char mText=expr.charAt(expr.length()-1);
        Boolean mBoolean =false;
        if(!(mText==('0')||mText==('1')||mText==('2')||
            mText==('3')||mText==('4')||mText==('5')||
            mText==('6')||mText==('7')||mText==('8')||
            mText==('9'))){
            mBoolean=true;
        }
        android.util.Log.i("CalculatorExpressionBuilder","mBoolean="+mBoolean);
        if(appendExpr.equals(".")&&mBoolean){
            appendExpr="0.";
        }
          }else if(expr.length()==0&&appendExpr.equals(".")){
             appendExpr="0.";
          }
        }



此方法完整的代码所示

    @Override
    public SpannableStringBuilder replace(int start, int end, CharSequence tb, int tbstart,
            int tbend) {
        if (start != length() || end != length()) {
            mIsEdited = true;
            return super.replace(start, end, tb, tbstart, tbend);
        }

        String appendExpr =
                mTokenizer.getNormalizedExpression(tb.subSequence(tbstart, tbend).toString());
        if (appendExpr.length() == 1) {
            final String expr = mTokenizer.getNormalizedExpression(toString());
            // SPRD 515934 enter all numbers and operators, calculator crash
            final int len = expr.length();
            switch (appendExpr.charAt(0)) {
                case '.':
                    // don't allow two decimals in the same number
                    final int index = expr.lastIndexOf('.');
                    // SPRD: 544823 modify for StringIndexOutOfBoundsException
                    if (index != -1 && index < start && TextUtils.isDigitsOnly(expr.substring(index + 1, start))) {
                        appendExpr = "";
                    }
                    break;
                case '+':
                case '*':
                case '/':
                    // don't allow leading operator
                    if (start == 0) {
                        appendExpr = "";
                        break;
                    }
                    /*SPRD: Bug 487833 don't allow leading operator change from - to * or / @{ */
                    if (start == 1 && expr.equals("-")) {
                        appendExpr = "";
                        break;
                    }
                    /* @} */
                    /* SPRD 515934 enter all numbers and operators, calculator crash @{ */
                    Log.d("Calculator", "len: " + len + " start: " + start+" expr: "+expr);
                    if (start > len) {
                        break;
                    }
                    /* @} */
                    // don't allow multiple successive operators
                    while (start > 0 && "+-*/".indexOf(expr.charAt(start - 1)) != -1) {
                        --start;
                    }
                    // fall through
                case '-':
                    // don't allow -- or +-
                    // SPRD 515934 enter all numbers and operators,calculator crash
                    if ((start > 0) && (start <= len) && "+-".indexOf(expr.charAt(start - 1)) != -1) {
                        --start;
                    }

                    // mark as edited since operators can always be appended
                    mIsEdited = true;
                    break;
                default:
                    break;
            }
        if(expr.length()>0){
        char mText=expr.charAt(expr.length()-1);
        Boolean mBoolean =false;
        if(!(mText==('0')||mText==('1')||mText==('2')||
            mText==('3')||mText==('4')||mText==('5')||
            mText==('6')||mText==('7')||mText==('8')||
            mText==('9'))){
            mBoolean=true;
        }
        android.util.Log.i("CalculatorExpressionBuilder","mBoolean="+mBoolean);
        if(appendExpr.equals(".")&&mBoolean){
            appendExpr="0.";
        }
          }else if(expr.length()==0&&appendExpr.equals(".")){
             appendExpr="0.";
          }
        }

        // since this is the first edit replace the entire string
        if (!mIsEdited && appendExpr.length() > 0) {
            start = 0;
            mIsEdited = true;
        }

        appendExpr = mTokenizer.getLocalizedExpression(appendExpr);
        return super.replace(start, end, appendExpr, 0, appendExpr.length());
    }


版权声明:本文为博主原创文章,未经博主允许不得转载。

解决Scrollview 嵌套recyclerview不能显示,高度不正常的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 我们先看一个效果,问题说的就是中间的Grid效果在Scrollview 嵌套recyclerview显示问题,在Android Api 24...
  • qq_35114086
  • qq_35114086
  • 2016年11月20日 13:13
  • 1514

前端开发中常遇到的浏览器兼容问题小结

web前端开发的浏览器兼容问题总结
  • AnterWang
  • AnterWang
  • 2016年11月25日 18:04
  • 5295

android 时间格式及时间差问题

最近做的项目中,聊天界面设计到时间格式的问题,因为以前没有仔细研究过时间格式以及时间差的问题,所以把android的时间方面的只是恶补了一下。 一、首先介绍一下时间概念。   在android中时间分...
  • wldestiny
  • wldestiny
  • 2015年09月04日 11:14
  • 2940

Android 4.4.2 自带计算器源码

(一)UI部分 UI部分主要包含如下几个方面 1.横竖屏布局 2.线性布局实现Table效果 3.自定义shape绘制效果和style风格 4.扩展FrameLayout...
  • zhangzhi2199
  • zhangzhi2199
  • 2014年08月25日 16:03
  • 975

android 仿Windows自带标准计算器

  • 2015年11月20日 11:50
  • 826KB
  • 下载

用JFinal框架自带的main方法运行正常的情况下,用tomcat发布项目出现css样式表引用错误和资源找不到问题。

用jfinal框架写了个demo,引用了
  • ni_cu
  • ni_cu
  • 2014年09月21日 16:42
  • 2826

Android自带播放器字符串显示乱码问题的一个解决方法

在开发中遇到这个问题,在网上搜了很多人的方法,没找到通过修改源代码解决乱码问题的比较具体的文章。研究了2天,找到了一个修改方法,可能不十分完善,但经过测试暂时还没再遇到乱码问题,所以分享一下。 ...
  • hellofeiya
  • hellofeiya
  • 2012年12月25日 14:20
  • 1641

Android自带的下载功能,不需要断点续传、大文件下载、通知栏显示等窝心问题,四行代码全部搞定(经测)

简单使用:         完成一个下载任务只需要4行代码,什么断点续传,大文件下载,通知栏进度显示….都不需要你操心。 //创建下载任务,downloadUrl就是下载链接 DownloadM...
  • ysh0011
  • ysh0011
  • 2016年08月26日 12:39
  • 1051

Json数据格式介绍、使用Android自带类库完成Json生成与解析

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992     因为在之前的项目中,xml和json数据格式都有使用过,所以对json格式的简单、高效的特点印...
  • bruceyangjie
  • bruceyangjie
  • 2015年12月14日 21:57
  • 366

Json数据格式介绍、使用Android自带类库完成Json生成与解析

 转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992     因为在之前的项目中,xml和json数据格式都有使用过,所以对json格式的简单、高效的特...
  • rsgzs
  • rsgzs
  • 2015年12月13日 00:02
  • 217
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android中自带计算器按.格式显示错误问题
举报原因:
原因补充:

(最多只允许输入30个字)