android中自带计算器按.格式显示错误问题
来源:互联网 发布:江苏省软件考试 编辑:程序博客网 时间:2024/06/04 18:59
在开发中遇到的关于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中自带计算器按.格式显示错误问题
- Android自带计算器研究
- Android自带计算器源码 分析
- Android 4.4.2 自带计算器源码
- PC中自带计算器使用说明
- Android中使用Opencv自带JavaCameraView实现高帧率竖屏显示
- 自带计算器
- 解决Oracle中显示小数格式错误的问题
- android源码中自带的Pinyin输入法问题
- 调用android自带的计算器 ZZ
- Windows自带的计算器
- IOS 仿自带计算器
- Android中自制通讯录用系统自带布局从数据库中读出显示
- Android自带播放器字符串显示乱码问题的一个解决方法
- 【转载】excel中自带的条件格式设置
- Android系统中自带的图标
- android中系统自带样式
- Android系统中自带的图标
- 基于Xposed修改微信运动步数
- kernel+PITF
- java中的匿名对象
- AppleScript基础语法讲解
- JavaScript的异步实现
- android中自带计算器按.格式显示错误问题
- Android内存泄漏分析
- Leetcode: Submission Details
- poj 1579 Function Run Fun(记忆化搜索)
- The Falling Leaves
- m4a文件裁剪
- 异常java.lang.IllegalArgumentException: Mapped Statements collection already contains value for...
- iframe的使用
- Vijos 1117 数的划分