개발자 승학

안드로이드 스튜디오 계산기 어플(앱) 예제 본문

it/안드로이드(android studio)

안드로이드 스튜디오 계산기 어플(앱) 예제

유승학 2018. 5. 22. 11:32

안드로이드 스튜디오로 만드는 계산기 예제입니다.

안드로이드를 공부하는데 계산기가 매우 좋은 예제라고 생각합니다.

글 맨 밑에 github에 코드를 올려놓았습니다.

코드를 이해하시고 받는걸 추천드립니다.



디자인은 윈도우 기본 제공 계산기와 비슷하게 만들었습니다.

위에는 기본적으로 제공하는 계산기이고

아래 사진은 예제사진입니다.


[기본제공 계산기]




[안드로이드 스튜디오 계산기 예제]





[activity_main.xml]

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:orientation="vertical">


<EditText
android:id="@+id/et_result"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/et_show"
android:hint="여기에는 정답이" />

<EditText
android:id="@+id/et_show"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:hint="진행과정" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="66dp"
android:weightSum="4">

<Button
android:onClick="onClick"
android:id="@+id/btn1"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />

<Button
android:onClick="onClick"
android:id="@+id/btn2"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="2" />

<Button
android:onClick="onClick"
android:id="@+id/btn3"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3" />

<Button
android:id="@+id/btn_add"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="+" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="136dp"
android:weightSum="4">

<Button
android:onClick="onClick"
android:id="@+id/btn4"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="4" />

<Button
android:onClick="onClick"
android:id="@+id/btn5"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="5" />

<Button
android:onClick="onClick"
android:id="@+id/btn6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="6" />

<Button
android:id="@+id/btn_sub"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="-" />

</LinearLayout>


<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_marginBottom="208dp"
android:weightSum="4">

<Button
android:onClick="onClick"
android:id="@+id/btn7"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="7" />

<Button
android:onClick="onClick"
android:id="@+id/btn8"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="8" />

<Button
android:onClick="onClick"
android:id="@+id/btn9"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="9" />

<Button
android:id="@+id/btn_mul"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="*" />

</LinearLayout>


<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:weightSum="4">

<Button
android:id="@+id/btn_plus_minus"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="±" />

<Button
android:onClick="onClick"
android:id="@+id/btn0"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="0" />

<Button
android:onClick="onClick"
android:id="@+id/btndot"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="." />

<Button
android:id="@+id/btn_result"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="=" />

</LinearLayout>

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginTop="185dp"
android:weightSum="4">

<Button
android:id="@+id/btn_clear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="C" />

<Button
android:id="@+id/btn_del"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="DEL" />

<Button
android:id="@+id/btn_remainder"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="%" />

<Button
android:id="@+id/btn_div"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="/" />

</LinearLayout>


</RelativeLayout>



RelativeLayout에 

4개의 LinearLayout을 만들고

1개의 LinearLayout당 4개의 버튼을 넣었습니다.

4개의 버튼의 크기를 같게 하였습니다.

LinearLayout의 weigthSum=4로 설정하고 한개의 버튼당 weight = 1로 주었습니다.

0 ~ 9번 버튼과 .(점) 버튼은 onClick속성을 주었습니다.


[MainActivity.java]

package com.example.ysh.calculator;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

EditText et_show,et_result;

Button add,sub,mul,div,remainder,del;
Button result;

//이번 연산의 결과를 저장
String history = "";
//피연산자1
String number1 = "";
//피연산자2
String number2 = "";

//어떤 연산자가 선택되었는지 확인하기 위한 int형 type변수
int type;

int ADD = 0;
int SUB = 1;
int MUL = 2;
int DIV = 3;
int REMAINDER = 4;
double d1;
double d2;

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

et_show = findViewById(R.id.et_show);
et_result = findViewById(R.id.et_result);
et_result.setText("");
add = findViewById(R.id.btn_add);
sub = findViewById(R.id.btn_sub);
mul = findViewById(R.id.btn_mul);
div = findViewById(R.id.btn_div);
remainder = findViewById(R.id.btn_remainder);
del = findViewById(R.id.btn_del);

result = findViewById(R.id.btn_result);

add.setOnClickListener(mListener);
sub.setOnClickListener(mListener);
mul.setOnClickListener(mListener);
div.setOnClickListener(mListener);
remainder.setOnClickListener(mListener);
result.setOnClickListener(mListener);
del.setOnClickListener(mListener);

//초기화
Button clear = findViewById(R.id.btn_clear);
clear.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
et_show.setText("");
et_result.setText("");
d1 = d2 = 0;
history = number1 = number2 = "";
}
});

Button plus_minus = findViewById(R.id.btn_plus_minus);
plus_minus.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//실수인지 정수인지 판단해서 부호 바꾸기
if( ( (Double.parseDouble(et_result.getText().toString())) - ((int)Double.parseDouble(et_result.getText().toString())) ) == 0.0 )
{
et_result.setText( "" + (Integer.parseInt(et_result.getText().toString()) * -1) );
}
else {
et_result.setText( "" + (Double.parseDouble(et_result.getText().toString()) * -1) );
}

}
});
}

Button.OnClickListener mListener = new Button.OnClickListener() {
@Override
public void onClick(View v) {
if(et_result.getText().toString() == null)
{
Toast.makeText(MainActivity.this,"수를 입력하세요",Toast.LENGTH_SHORT).show();
}
switch (v.getId()) {
case R.id.btn_add :
number1 = et_result.getText().toString();
history = et_result.getText().toString() + " + ";
et_show.setText(history);
et_result.setText("");

type = ADD;
break;

case R.id.btn_sub :
number1 = et_result.getText().toString();
history = et_result.getText().toString() + " - ";
et_show.setText(history);
et_result.setText("");

type = SUB;
break;

case R.id.btn_mul :
number1 = et_result.getText().toString();
history = et_result.getText().toString() + " * ";
et_show.setText(history);
et_result.setText("");

type = MUL;
break;

case R.id.btn_div :
number1 = et_result.getText().toString();
history = et_result.getText().toString() + " / ";
et_show.setText(history);
et_result.setText("");

type = DIV;
break;

case R.id.btn_remainder :
number1 = et_result.getText().toString();
history = et_result.getText().toString() + " % ";
et_show.setText(history);
et_result.setText("");

type = REMAINDER;
break;

case R.id.btn_del :

String del_number = et_result.getText().toString();
Toast.makeText(MainActivity.this,del_number,Toast.LENGTH_SHORT).show();
et_result.setText(del_number.substring(0,del_number.length() - 1));
break;

case R.id.btn_result :
double result = 0;
Toast.makeText(MainActivity.this, "결과", Toast.LENGTH_SHORT).show();
number2 = et_result.getText().toString();
history = history + et_result.getText().toString();
et_show.setText(history);

d1 = Double.parseDouble(number1);
d2 = Double.parseDouble(number2);

if(type == ADD) {
result = d1 + d2;
et_result.setText("" + result);
} else if (type == SUB) {
result = d1 - d2;
et_result.setText("" + result);
}else if (type == MUL) {
result = d1 * d2;
et_result.setText("" + result);
}else if (type == DIV) {
result = d1 / d2;
et_result.setText("" + result);
}else if (type == REMAINDER) {
result = d1 % d2;
et_result.setText("" + result);
}

number1 = et_result.getText().toString();
break;
}
}
};

public void onClick (View v)
{
switch(v.getId()){
case R.id.btn0 : et_result.setText(et_result.getText().toString() + 0); break;
case R.id.btn1 : et_result.setText(et_result.getText().toString() + 1); break;
case R.id.btn2 : et_result.setText(et_result.getText().toString() + 2); break;
case R.id.btn3 : et_result.setText(et_result.getText().toString() + 3); break;
case R.id.btn4 : et_result.setText(et_result.getText().toString() + 4); break;
case R.id.btn5 : et_result.setText(et_result.getText().toString() + 5); break;
case R.id.btn6 : et_result.setText(et_result.getText().toString() + 6); break;
case R.id.btn7 : et_result.setText(et_result.getText().toString() + 7); break;
case R.id.btn8 : et_result.setText(et_result.getText().toString() + 8); break;
case R.id.btn9 : et_result.setText(et_result.getText().toString() + 9); break;
case R.id.btndot : et_result.setText(et_result.getText().toString() + "."); break;
}
}
}
맨 밑 번호와 점(.) 버튼은 onClick속성을 주어서 추가하였습니다.
연산자 버튼들은 onCreate()에서 바로 클릭 이벤트를 주지 않고

클릭 리스너를 따로 만들어서 CASE별로 선택 조건을 주었습니다.
훨씬 보기 편할거에용



안드로이드 github


https://github.com/aiex1234/Calculator 


궁금사항은 댓글 달아주세요

Comments