简单的Android计算器

时间:2012-08-20 06:20:03

标签: android calculator

我正在尝试构建一个简单的计算器。以下是活动文件:

 package com.example.calcsimple;


import android.os.Bundle;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.view.Menu; 
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;


public class MainActivity extends Activity {

Button btnClr , btn0 , btn1 , btn2 , btn3 , btn4, btn5 , btn6 , btn7 , btn8 , btn9 , btnAdd , btnSub , btnMul , btnDiv , btnEq;
TextView textView1 ; 
double i1 , i2 , result=0;
boolean newValue = false;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    textView1 = (TextView) findViewById(R.id.textView1);

    btnClr = (Button) findViewById(R.id.btnClr);
    btn0 = (Button) findViewById(R.id.btn0);
    btn1 = (Button) findViewById(R.id.btn1);
    btn2 = (Button) findViewById(R.id.btn2);
    btn3 = (Button) findViewById(R.id.btn3);
    btn4 = (Button) findViewById(R.id.btn4);
    btn5 = (Button) findViewById(R.id.btn5);
    btn6 = (Button) findViewById(R.id.btn6);
    btn7 = (Button) findViewById(R.id.btn7);
    btn8 = (Button) findViewById(R.id.btn8);
    btn9 = (Button) findViewById(R.id.btn9);
    btnAdd = (Button) findViewById(R.id.btnAdd);
    btnSub = (Button) findViewById(R.id.btnSub);
    btnMul = (Button) findViewById(R.id.btnMul);
    btnDiv = (Button) findViewById(R.id.btnDiv);
    btnEq = (Button) findViewById(R.id.btnEq);

    btn0.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

            textView1.append("0");
        }
    });

    btn1.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

             if(newValue == true)
                 textView1.setText("1");
             else
                 textView1.setText(textView1.getText().toString() +  "1");

             newValue = false;
        }
    });

    btn2.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

             if(newValue == true)
                 textView1.setText("2");
             else
                 textView1.setText(textView1.getText().toString() +  "2");

             newValue = false;
        }
    });

    btn3.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

             if(newValue == true)
                 textView1.setText("3");
             else
                 textView1.setText(textView1.getText().toString() +  "3");

             newValue = false;
        }
    });

    btn4.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

             if(newValue == true)
                 textView1.setText("4");
             else
                 textView1.setText(textView1.getText().toString() +  "4");

             newValue = false;
        }
    });

    btn5.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

             if(newValue == true)
                 textView1.setText("5");
             else
                 textView1.setText(textView1.getText().toString() +  "5");

             newValue = false;
        }
    });

    btn6.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

             if(newValue == true)
                 textView1.setText("6");
             else
                 textView1.setText(textView1.getText().toString() +  "6");

             newValue = false;
        }
    });

    btn7.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

             if(newValue == true)
                 textView1.setText("7");
             else
                 textView1.setText(textView1.getText().toString() +  "7");

             newValue = false;
        }
    });

    btn8.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

             if(newValue == true)
                 textView1.setText("8");
             else
                 textView1.setText(textView1.getText().toString() +  "8");

             newValue = false;
        }
    });

    btn9.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

             if(newValue == true)
                 textView1.setText("9");
             else
                 textView1.setText(textView1.getText().toString() +  "9");

             newValue = false;
        }
    });


    btnAdd.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

            i1 = Double.parseDouble(textView1.getText().toString());
            textView1.setText("");
            result = result + i1;
            textView1.setText(Double.toString(result));
            newValue=true ;  


        }
    });

    btnSub.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

            i1 = Double.parseDouble(textView1.getText().toString());
            result = result - i1;
            textView1.setText(Double.toString(result));
            newValue=true ;  
            textView1.setText("");
        }
    });

    btnMul.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {
            i1 = Double.parseDouble(textView1.getText().toString());
            result = result * i1;
            textView1.setText(Double.toString(result));
            newValue=true ;  
            textView1.setText("");
        }
    });

    btnDiv.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

            i1 = Double.parseDouble(textView1.getText().toString());
            result = result / i1;
            textView1.setText(Double.toString(result));
            newValue=true ;  
            textView1.setText("");

        }
    });

    btnEq.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

            textView1.setText(Double.toString(result));
        }
    });

    btnClr.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v) {

            textView1.setText("");
            newValue=true;
            result = 0 ;
            i1=0;
        }
    });

    }


}

以下是XML布局文件:

<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >

<Button
    android:id="@+id/btn1"
    android:layout_width="44dp"
    android:layout_height="wrap_content"
    android:layout_x="6dp"
    android:layout_y="109dp"
    android:text="1" />

<Button
    android:id="@+id/btn2"
    android:layout_width="48dp"
    android:layout_height="wrap_content"
    android:layout_x="88dp"
    android:layout_y="108dp"
    android:text="2" />

<Button
    android:id="@+id/btn3"
    android:layout_width="44dp"
    android:layout_height="wrap_content"
    android:layout_x="174dp"
    android:layout_y="106dp"
    android:text="3" />

<Button
    android:id="@+id/btn4"
    android:layout_width="45dp"
    android:layout_height="wrap_content"
    android:layout_x="6dp"
    android:layout_y="184dp"
    android:text="4" />

<TextView
    android:id="@+id/textView1"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:layout_x="0dp"
    android:layout_y="4dp"
    android:text="" />

<Button
    android:id="@+id/btn5"
    android:layout_width="45dp"
    android:layout_height="wrap_content"
    android:layout_x="92dp"
    android:layout_y="186dp"
    android:text="5" />

<Button
    android:id="@+id/btn6"
    android:layout_width="45dp"
    android:layout_height="wrap_content"
    android:layout_x="175dp"
    android:layout_y="180dp"
    android:text="6" />

<Button
    android:id="@+id/btn7"
    android:layout_width="44dp"
    android:layout_height="wrap_content"
    android:layout_x="9dp"
    android:layout_y="261dp"
    android:text="7" />

<Button
    android:id="@+id/btn8"
    android:layout_width="44dp"
    android:layout_height="wrap_content"
    android:layout_x="94dp"
    android:layout_y="264dp"
    android:text="8" />

<Button
    android:id="@+id/btn9"
    android:layout_width="46dp"
    android:layout_height="wrap_content"
    android:layout_x="176dp"
    android:layout_y="263dp"
    android:text="9" />

<Button
    android:id="@+id/btn0"
    android:layout_width="45dp"
    android:layout_height="wrap_content"
    android:layout_x="96dp"
    android:layout_y="348dp"
    android:text="0" />

<Button
    android:id="@+id/btnAdd"
    android:layout_width="45dp"
    android:layout_height="wrap_content"
    android:layout_x="248dp"
    android:layout_y="105dp"
    android:text="+" />

<Button
    android:id="@+id/btnSub"
    android:layout_width="43dp"
    android:layout_height="wrap_content"
    android:layout_x="249dp"
    android:layout_y="181dp"
    android:text="-" />

<Button
    android:id="@+id/btnMul"
    android:layout_width="43dp"
    android:layout_height="wrap_content"
    android:layout_x="248dp"
    android:layout_y="267dp"
    android:text="X" />

<Button
    android:id="@+id/btnDiv"
    android:layout_width="44dp"
    android:layout_height="wrap_content"
    android:layout_x="248dp"
    android:layout_y="347dp"
    android:text="/" />

<Button
    android:id="@+id/btnEq"
    android:layout_width="44dp"
    android:layout_height="wrap_content"
    android:layout_x="176dp"
    android:layout_y="347dp"
    android:text="=" />

<Button
    android:id="@+id/btnClr"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_x="12dp"
    android:layout_y="346dp"
    android:text="Clear" />

</AbsoluteLayout>

现在的问题是我找不到任何方法来接收和存储用户的第二个操作数。

2 个答案:

答案 0 :(得分:1)

从您的代码中可以看出,您的两个操作数都要输入到同一个TextView中。首先输入你的第一个操作数,然后按任意一个操作符然后在同一个TextView中第二个操作数将进入。此外,每个操作数似乎都由单个按钮处理,所以你只需要通过单击输入它们在按钮上。

首先,输入您的第一个操作数,单击一个运算符,然后单击第二个操作数,然后单击=。这应该适合你。

答案 1 :(得分:0)

'you can try this code..'
package com.example.showoff;

import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.text.method.DigitsKeyListener;
import android.view.Menu;
import android.view.View;
import android.widget.Button;


import android.widget.TextView;

public class MainActivity extends Activity {

        TextView edittest1;

        Button one, two, three, four, five, six, seven, eight, nine, zero, add, sub, mul, div, cancel, equal;

        ArrayList<Float> math = new ArrayList<Float>();
        float m1;
        float m2;
        float temp;

        int currentOperation = 0;
        int nextOperation;

        final static int ADD = 1;
        final static int SUBTRACT = 2;
        final static int MULTIPLY =3;
        final static int DIVISION = 4;
        final static int EQUALS = 0;
        final static int CLEAR = 1;
        final static int DONT_CLEAR = 0;
        int clearDisplay = 0;




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

            edittest1 = (TextView) findViewById(R.id.edittest1);



            one =(Button) findViewById(R.id.btnNum1Id);
            two =(Button) findViewById(R.id.btnNum2Id);
            three =(Button) findViewById(R.id.btnNum3Id);
            four =(Button) findViewById(R.id.btnNum4Id);
            five =(Button) findViewById(R.id.btnNum5Id);
            six =(Button) findViewById(R.id.btnNum6Id);
            seven =(Button) findViewById(R.id.btnNum7Id);
            eight =(Button) findViewById(R.id.btnNum8Id);
            nine =(Button) findViewById(R.id.btnNum9Id);
            zero =(Button) findViewById(R.id.btnNum0Id);
            add =(Button) findViewById(R.id.btnNumAddId);
            sub =(Button) findViewById(R.id.btnNumSubId);
            mul =(Button) findViewById(R.id.btnNumMulId);
            div =(Button) findViewById(R.id.btnNumDivId);
            cancel =(Button) findViewById(R.id.btnNumClearId);
            equal =(Button) findViewById(R.id.btnNumEqualId);

            edittest1.setKeyListener(DigitsKeyListener.getInstance(true,true));

            registerListeners();


    }

    private void registerListeners() {
        // TODO Auto-generated method stub

        one.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                    edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
               edittest1.append("1");

            }
        });

        two.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                    edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
                edittest1.append("2");

            }
        });

        three.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                   edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
                edittest1.append("3");

            }
        });
        four.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                  edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
                edittest1.append("4");

            }
        });

        five.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                   edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
                edittest1.append("5");

            }
        });

        six.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                   edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
                edittest1.append("6");

            }
        });
        seven.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                    edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
                edittest1.append("7");

            }
        });

        eight.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                    edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
                edittest1.append("8");

            }
        });

        nine.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                    edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
                edittest1.append("9");

            }
        });
        zero.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (clearDisplay == CLEAR) {
                    edittest1.setText("");
                }
                clearDisplay = DONT_CLEAR;
                edittest1.append("0");

            }
        });
        add.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {


                calcLogic(ADD);
                }
            }
        );

        sub.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calcLogic(SUBTRACT);
            }               
        });
        mul.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calcLogic(MULTIPLY);

            }
        });
        div.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                calcLogic(DIVISION);                    
            }
        });
        equal.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                calcLogic(EQUALS);

            }
        });
        cancel.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                edittest1.setText("0");
                m1 = 0;
                m2 = 0;
                math.removeAll(math);
                currentOperation = 0;
                nextOperation = 0;    

            }
        });


}
    private void calcLogic(int operator){
         math.add(Float.parseFloat(edittest1.getText().toString()));

            if (operator != EQUALS) {
                nextOperation = operator;
            }
            else if  (operator == EQUALS){
                nextOperation = 0;
                //operator=' ';
            }



            switch (currentOperation) {
            case ADD:               
                m1 = math.get(0);
                m2 = math.get(1);

                math.removeAll(math);

                math.add(m1 + m2);


                edittest1.setText(String.format("%.3f", math.get(0)));



                break;
            case SUBTRACT:
                m1 = math.get(0);
                m2 = math.get(1);

                math.removeAll(math);

                math.add(m1 - m2);

                edittest1.setText(String.format("%.3f", math.get(0)));
                break;
            case MULTIPLY:
                m1 = math.get(0);
                m2 = math.get(1);

                math.removeAll(math);

                math.add(m1 * m2);

                edittest1.setText(String.format("%.3f", math.get(0)));
                break;
            case DIVISION:
                m1 = math.get(0);
                m2 = math.get(1);

                math.removeAll(math);

                math.add(m1 / m2);

                edittest1.setText(String.format("%.3f", math.get(0)));
                break;
            }

            clearDisplay = CLEAR;
            currentOperation = nextOperation;
            if (operator == EQUALS) {
                m1 = 0;
                m2 = 0;
                math.removeAll(math);
            }

        }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

}