Android 实现计算器功能

实现计算器功能:
image.png

1.先导包 bsh-2.0b4.jar

2.布局文件:
通过TableLayout与TableRow实现布局。

   <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".activity.CalculatorActivity"
    android:id="@+id/lay">

    <EditText
        android:layout_width="fill_parent"
        android:layout_height="100dp"
        android:textColor="#FFF"
        android:textSize="20pt"
        android:background="#000"
        android:editable="false"
        android:gravity="right|center_vertical"
        android:id="@+id/rsText"
        />

    <TableLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        >
        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.18"
            >
            <Button
            android:id="@+id/left"
    android:layout_height="fill_parent"
              android:layout_weight="0.25"
                android:background="@drawable/funclk"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:paddingBottom="7dp"
                android:text="("
                />
            <Button
                android:id="@+id/right"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/funclk"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:layout_marginLeft="1dp"
                android:paddingBottom="7dp"
                android:textColor="#FFF"
                android:text=")"
                />
            <Button
                android:id="@+id/tonone"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/funclk"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:text="C"
                />

            <Button
                android:id="@+id/delete"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/funclk"
                android:textColor="#FFF"
                android:textSize="8pt"
                android:layout_marginLeft="1dp"
                android:layout_marginBottom="1dp"
                android:text="清除" />
        </TableRow>
        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            >
            <Button
                android:id="@+id/num7"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="7" />

            <Button
                android:id="@+id/num8"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="8"  />

            <Button
                android:id="@+id/num9"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="9" />

            <Button
                android:id="@+id/division"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/funclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="÷" />
        </TableRow>

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            >
            <Button
                android:id="@+id/num4"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="4" />

            <Button
                android:id="@+id/num5"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="5"  />

            <Button
                android:id="@+id/num6"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="6" />

            <Button
                android:id="@+id/multiply"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/funclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="×" />
        </TableRow>

        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            >
            <Button
                android:id="@+id/num1"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="1" />

            <Button
                android:id="@+id/num2"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="2"  />

            <Button
                android:id="@+id/num3"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="3" />

            <Button
                android:id="@+id/minus"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/funclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="-" />
        </TableRow>
        <TableRow
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_weight="0.2"
            >
            <Button
                android:id="@+id/dot"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="." />

            <Button
                android:id="@+id/num0"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/numclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="0"  />

            <Button
                android:id="@+id/equ"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/funclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="=" />

            <Button
                android:id="@+id/plus"
                android:layout_height="fill_parent"
                android:layout_weight="0.25"
                android:background="@drawable/funclk"
                android:layout_marginLeft="1dp"
                android:textColor="#FFF"
                android:textSize="20pt"
                android:layout_marginBottom="1dp"
                android:text="+" />
        </TableRow>
    </TableLayout>

</LinearLayout>

3.代码中:

public class CalculatorActivity  extends Activity implements OnClickListener {

    EditText rsText = null;  //显示器
    boolean isClear = false; //用于记录依稀
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calculator);

        //fun 功能按钮
        rsText = (EditText)findViewById(R.id.rsText);
        Button btnDel = (Button)findViewById(R.id.delete);
        Button btnPlu = (Button)findViewById(R.id.plus);
        Button btnMin = (Button)findViewById(R.id.minus);
        Button btnMul = (Button)findViewById(R.id.multiply);
        Button btnDiv = (Button)findViewById(R.id.division);
        Button btnEqu = (Button)findViewById(R.id.equ);
        Button btnTono = (Button)findViewById(R.id.tonone);
        Button btnLeft = (Button)findViewById(R.id.left);
        Button btnRight = (Button)findViewById(R.id.right);

        //num 数字按钮
        Button num0 = (Button)findViewById(R.id.num0);
        Button num1 = (Button)findViewById(R.id.num1);
        Button num2 = (Button)findViewById(R.id.num2);
        Button num3 = (Button)findViewById(R.id.num3);
        Button num4 = (Button)findViewById(R.id.num4);
        Button num5 = (Button)findViewById(R.id.num5);
        Button num6 = (Button)findViewById(R.id.num6);
        Button num7 = (Button)findViewById(R.id.num7);
        Button num8 = (Button)findViewById(R.id.num8);
        Button num9 = (Button)findViewById(R.id.num9);
        Button dot = (Button)findViewById(R.id.dot);

        //listener
        btnTono.setOnClickListener(this);
        btnLeft.setOnClickListener(this);
        btnRight.setOnClickListener(this);
        btnDel.setOnClickListener(this);
        btnPlu.setOnClickListener(this);
        btnMin.setOnClickListener(this);
        btnMul.setOnClickListener(this);
        btnDiv.setOnClickListener(this);
        btnEqu.setOnClickListener(this);
        num0.setOnClickListener(this);
        num1.setOnClickListener(this);
        num2.setOnClickListener(this);
        num3.setOnClickListener(this);
        num4.setOnClickListener(this);
        num5.setOnClickListener(this);
        num6.setOnClickListener(this);
        num7.setOnClickListener(this);
        num8.setOnClickListener(this);
        num9.setOnClickListener(this);
        dot.setOnClickListener(this);
    }

    @Override
    public void onClick(View e) {
        Button btn = (Button)e;
        String exp = rsText.getText().toString();
        if(isClear &&(
                btn.getText().equals("0")
                        ||btn.getText().equals("1")
                        ||btn.getText().equals("2")
                        ||btn.getText().equals("3")
                        ||btn.getText().equals("4")
                        ||btn.getText().equals("5")
                        ||btn.getText().equals("6")
                        ||btn.getText().equals("7")
                        ||btn.getText().equals("8")
                        ||btn.getText().equals("9")
                        ||btn.getText().equals("."))
                ||btn.getText().toString().equals("算数公式错误")){
            rsText.setText("");
            isClear = false;
        }
        if(btn.getText().equals("C")){
            rsText.setText("");
        }else if(btn.getText().equals("清除")){
            if(exp==null || exp.trim().length()==0)
                return;
            else
                rsText.setText(exp.substring(0, exp.length()-1));
        }else if(btn.getText().equals("=")){
            if(exp==null || exp.trim().length()==0)
                return;
            exp = exp.replaceAll("×", "*");
            exp = exp.replaceAll("÷", "/");
            exp = getRs(exp);
            if(exp.endsWith(".0")){
                exp = exp.substring(0, exp.indexOf(".0"));
            }
            rsText.setText(exp);
            isClear = false;
        }else{
            rsText.setText(rsText.getText()+""+btn.getText());
            isClear = false;
        }
        //按键完成后始终保持光标在最后一位
        rsText.setSelection(rsText.getText().length());
    }

    /***
     * @param  exp 算数表达式
     * @return 根据表达式返回结果
     */
    private String getRs(String exp){
        Interpreter bsh = new Interpreter();
        Number result = null;
        try {
            exp = filterExp(exp);
            result = (Number)bsh.eval(exp);
        } catch (EvalError e) {
            e.printStackTrace();
            isClear = true;
            return "算数公式错误";
        }
        return result.doubleValue()+"";
    }


    /**
     * @param exp 算数表达式
     * @return 因为计算过程中,全程需要有小数参与.
     */
    private String filterExp(String exp) {
        String num[] = exp.split("");
        String temp = null;
        int begin=0,end=0;
        for (int i = 1; i < num.length; i++) {
            temp = num[i];
            if(temp.matches("[+-/()*]")){
                if(temp.equals(".")) continue;
                end = i - 1;
                temp = exp.substring(begin, end);
                if(temp.trim().length() > 0 && temp.indexOf(".")<0)
                    num[i-1] = num[i-1]+".0";
                begin = end + 1;
            }
        }
        return Arrays.toString(num).replaceAll("[\\[\\], ]", "");
    }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值