본문 바로가기
[ Developer ]/Android

[Android] 안드로이드 계산기 만들어보기

by 김현섭. 2016. 7. 8.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
Android 간단한 계산기 만들기

계산기를 만들기 위해서 버튼을 0~9까지 각각 주고 버튼 클릭 한 버튼의 값을 가져오는 방식을 알아야한다

우선 버튼을 추가하기 위해서 activity_main.xml에서 버튼을 추가한다

 


Text를 1로 바꿔 주고 Text로 가서 ID를 btn1로 변경을 해준다
그런 후 MainActivity.java에서 로직을 작성해준다


버튼을 받는데 에러가 날 때 캐스팅을 해주면 된다


이제 button1의 OnClickListner를 이용해서 이벤트를 처리할 수 있다


button1의 setOnClickListener를 보면 View.OnClickLstener를 볼 수 있는데 인터페이스이다
지금 button1이 에러가 발생하는 이유는 setonClickListener의 인스턴스에 button1가 없기 때문이다
그래서 button1을 상수화 시켜주면 된다


그렇다면 실행을 해서 결과를 확인해 본다


1 버튼을 누르고 1 값이 Toast 처리된 것을 볼 수 있다

*Source Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        final Button button1 = (Button) findViewById(R.id.btn1);
 
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(v.getContext(), button1.getText(), Toast.LENGTH_SHORT).show();
            }
        });
    }
cs

위의 방식에서 button1 대신에 view 자체를 사용할 수도 있다



@ 계산기
이제 새로운 프로젝트를 생성해서 계산기를 작성해보자
우선 버튼을 생성한다


이제 MainActivity.java에서 모든 버튼들을 가져온다


그런 후 각각의 이벤트를 설정해주면 반복되는 소스가 길어지기 때문에 합칠 수 있다


위와 같이 작성되면 중복되는 구문을 줄여줄 수 있다 결과가 잘 나오는 것을 볼 수 있다



이제는 버튼을 클릭하면 화면에 보여지는 것을 만들어 본다
글자가 들어갈 Large Text를 생성하고 gravity 값을 설정해 준다


그런 후 Large Text 값을 0으로 변경한다
이제 다시 java 코드쪽으로 간다 
버튼을 클릭 시 버튼값을 입력창에 넣어준다 만약에 0값이 들어있다면 0이 지워지고 입력된다

우선 텍스트를 가져온다


가져온 후 textView에 글자를 추가해주면 된다 텍스트를 넘겨주기 위해서는 setText를 이용한다
위와 같이 작성하면 잘 출력이 된다


하지만 현재는 기존의 값은 사라지고 새로운 값으로만 대체가 된다
기존의 값을 가져와서 처리한다


Integer.parseint는 왜 필요할 까?
  • 처음에 0 값이 있고 숫자를 입력 시 0을 탈락 시키기 위함이다

결과를 보면 입력되는 것을 볼 수 있다



@ 사칙 연산 계산기

위의 과정을 이용해서 사칙 연산을 구현한다


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
 
import java.util.HashMap;
import java.util.Map;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        final Button btn0 = (Button) findViewById(R.id.btn0);
        final Button btn1 = (Button) findViewById(R.id.btn1);
        final Button btn2 = (Button) findViewById(R.id.btn2);
        final Button btn3 = (Button) findViewById(R.id.btn3);
        final Button btn4 = (Button) findViewById(R.id.btn4);
        final Button btn5 = (Button) findViewById(R.id.btn5);
        final Button btn6 = (Button) findViewById(R.id.btn6);
        final Button btn7 = (Button) findViewById(R.id.btn7);
        final Button btn8 = (Button) findViewById(R.id.btn8);
        final Button btn9 = (Button) findViewById(R.id.btn9);
        final Button btnAdd = (Button) findViewById(R.id.btnAdd);
        final Button btnSub = (Button) findViewById(R.id.btnSub);
        final Button btnMul = (Button) findViewById(R.id.btnMul);
        final Button btnDiv = (Button) findViewById(R.id.btnDiv);
        final Button btnEqual = (Button) findViewById(R.id.btnEqual);
 
        final TextView textView = (TextView) findViewById(R.id.textView);
 
        final Map<StringString> calc = new HashMap<StringString>();
        calc.put("reset""N");
 
        View.OnClickListener clickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Toast.makeText(v.getContext(), ((Button) v).getText(), Toast.LENGTH_SHORT).show();
 
                String text = "";
 
                // 숫자라면 input
                if ( !((Button) v).getText().equals("+")
                        && !((Button) v).getText().equals("-")
                        && !((Button) v).getText().equals("/")
                        && !((Button) v).getText().equals("*")
                        && !((Button) v).getText().equals("=")) {
 
                    if ( calc.get("reset").equals("Y") ) {
                        calc.put("reset""N");
                        calc.put("number1""");
                        calc.put("operation""");
 
                        text = (String) ((Button) v).getText();
                        textView.setText( Integer.parseInt(text) + "" );
                    }
                    else {
                        text = (String) textView.getText();
                        text += ((Button) v).getText();
 
                        textView.setText( Integer.parseInt(text) + "" );
                    }
                }
 
                // 연산자라면 연산자와 이전에 입력한 숫자 input
                if ( ((Button) v).getText().equals("+")
                        || ((Button) v).getText().equals("-")
                        || ((Button) v).getText().equals("/")
                        || ((Button) v).getText().equals("*")) {
                    calc.put("operation", (String) ((Button) v).getText());
                    calc.put("number1", (String) textView.getText());
                    textView.setText( "0" );
                }
 
                // = 이퀄 시 연산
                if ( ((Button) v).getText().equals("=") ) {
                    int number1 = Integer.parseInt(calc.get("number1"));
                    int number2 = Integer.parseInt((String) textView.getText());
 
                    int result = 0;
 
                    // 연산자에 따른 연산 처리
                    if ( calc.get("operation").equals("+") ) {
                        result = number1 + number2;
                    }
                    else if ( calc.get("operation").equals("-") ) {
                        result = number1 - number2;
                    }
                    else if ( calc.get("operation").equals("*") ) {
                        result = number1 * number2;
                    }
                    else if ( calc.get("operation").equals("/") ) {
                        double divResult = number1 / number2;
                        result = (int) divResult;
                    }
 
                    // 리셋 값 (결과 시)
                    calc.put("reset""Y");
 
                    textView.setText( result + "" );
                }
            }
        };
 
        btn0.setOnClickListener(clickListener);
        btn1.setOnClickListener(clickListener);
        btn2.setOnClickListener(clickListener);
        btn3.setOnClickListener(clickListener);
        btn4.setOnClickListener(clickListener);
        btn5.setOnClickListener(clickListener);
        btn6.setOnClickListener(clickListener);
        btn7.setOnClickListener(clickListener);
        btn8.setOnClickListener(clickListener);
        btn9.setOnClickListener(clickListener);
        btnAdd.setOnClickListener(clickListener);
        btnSub.setOnClickListener(clickListener);
        btnMul.setOnClickListener(clickListener);
        btnDiv.setOnClickListener(clickListener);
        btnEqual.setOnClickListener(clickListener);
    }
}
cs