EDP_PD 2018-12-20 23:04 采纳率: 0%
浏览 1199

安卓计算器中加入连续计算功能如何实现

package com.lianghe.caculator;

import android.app.Activity;
import android.os.Bundle;
import android.text.InputType;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import com.lianghe.tools.Arith;

public class CaculatorActivity extends Activity implements OnTouchListener,
OnLongClickListener {

private EditText et;
private String operator = "";// 操作
private String oldText = "";
private boolean inputDone = true;
private String operatorNumber = "";

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    et = (EditText) findViewById(R.id.tv_result);
    Button CEbton = (Button) findViewById(R.id.btnCE);
    Button delBtn = (Button) findViewById(R.id.btnDel);
    delBtn.setOnLongClickListener(this);
    CEbton.setOnLongClickListener(this);
    et.setOnTouchListener(this);
}

public void onButtonClickHandler(View view) {
    Button button = (Button) view;
    if ("del".equals(button.getText())) {
        String s = String.valueOf(et.getText());
        if (s.length() > 0) {
            if (s.length() == 1) {
                clear("0");
            } else {
                et.setText(s.subSequence(0, s.length() - 1));
            }
            operatorNumber = et.getText().toString();
        }
    }
    else    if("CE".equals(button.getText())){
        clear("0");




    } 
    else if ("+".equals(button.getText()) || "-".equals(button.getText())
            || "*".equals(button.getText()) || "÷".equals(button.getText())
            || "=".equals(button.getText())) {
        caculate();// 计算
        operator = button.getText().toString();// 操作符
        oldText = et.getText().toString();
        inputDone = true;
    } else {
        if (inputDone) {
            et.setText(button.getText().toString());
            inputDone = false;
        } else {
            et.append(button.getText().toString());
        }
        operatorNumber = et.getText().toString();
    }
    et.requestFocus(TextView.FOCUS_RIGHT);
}

private void caculate() {
    if ("+".equals(operator)) {
        et.setText(String.valueOf(Arith.add(oldText, operatorNumber)));
    } else if ("-".equals(operator)) {
        et.setText(String.valueOf(Arith.sub(oldText, operatorNumber)));
    } else if ("*".equals(operator)) {
        et.setText(String.valueOf(Arith.mul(oldText, operatorNumber)));
    } else if ("÷".equals(operator)) {
        if ("0".equals(operatorNumber)) {
            clear("被除数不能为零");
        } else {
            et.setText(String.valueOf(Arith.div(oldText, operatorNumber)));
        }
    }
}

private void clear(String text) {
    et.setText(text);
    operator = "";
    oldText = "";
    operatorNumber = "";
    inputDone = true;
}

@Override
public boolean onTouch(View view, MotionEvent event) {
    et.setInputType(InputType.TYPE_NULL);
    return false;
}

@Override
public boolean onLongClick(View v) {
    clear("0");
    return false;
}

}

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥15 运筹学中在线排序的时间在线排序的在线LPT算法
    • ¥30 求一段fortran代码用IVF编译运行的结果
    • ¥15 深度学习根据CNN网络模型,搭建BP模型并训练MNIST数据集
    • ¥15 lammps拉伸应力应变曲线分析
    • ¥15 C++ 头文件/宏冲突问题解决
    • ¥15 用comsol模拟大气湍流通过底部加热(温度不同)的腔体
    • ¥50 安卓adb backup备份子用户应用数据失败
    • ¥20 有人能用聚类分析帮我分析一下文本内容嘛
    • ¥15 请问Lammps做复合材料拉伸模拟,应力应变曲线问题
    • ¥30 python代码,帮调试,帮帮忙吧