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());
    }


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

相关文章推荐

android 仿Windows自带标准计算器

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

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

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

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

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

【Android开发经验】Json数据格式介绍、使用Android自带类库完成Json生成与解析

初识json

【swing】简单计算器(样式神还原系统自带版本)

1、运行截图 2、源码 package jframe; import java.awt.BorderLayout; import java.awt.Dimension; import j...
  • yjqyyjw
  • yjqyyjw
  • 2016年08月26日 14:48
  • 486

Windows自带的计算器

转自: http://www.mybbdy.com/show.asp?id=2712 一、进行复杂运算   我们平时使用计算器时,往往进行简单计算,如8×9=72。如果复杂...

个人作品——类windows自带的计算器

先抒发一下现在心情:好高兴奥!        IDE:eclipse+JDK+ADT插件        语言:java(javaAPI 很多函数都应经封装好了,使用起来很方便)        软...

网页布局实例————win7自带计算器

晚上7点左右开始进行布局,9点半正好搞定。发现自己专注的时候效率真的挺高的哈。在进行计算器布局之前,做过两个简单的网页布局练练手,今晚整体感觉还好,难度不大。但是在两个浏览器之间调试有点蛋疼,真心不想...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android中自带计算器按.格式显示错误问题
举报原因:
原因补充:

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