wasup

Android) 계산기 만들기 본문

IT/Android

Android) 계산기 만들기

wasupup 2021. 8. 10. 15:44
반응형

new project name : CalcTest

 

activity_main.xml

 

MainActivity.java


만들 화면


activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="#FFFFFF"
    android:stretchColumns="0,1,2,3,4"
    >
    <!--
    android:stretchColumns="0,1,2,3,4"
    0~4번까지 같은 크기 주기.
    -->

    <!-- 변수는 소문자로 통일, 자바식 변수명을 따름-->
    <TableRow>
        <EditText
            android:id="@+id/edit1"
            android:layout_span="5"
            android:hint="숫자1 입력"
            />
    </TableRow>
    <TableRow>
        <EditText
            android:id="@+id/edit2"
            android:layout_span="5"
            android:hint="숫자2 입력"
            />
    </TableRow>
    <TableRow>
        <Button
            android:id="@+id/btnNum0"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="0"
            />
        <Button
            android:id="@+id/btnNum1"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="1"
            />
        <Button
            android:id="@+id/btnNum2"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="2"
            />
        <Button
            android:id="@+id/btnNum3"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="3"
            />
        <Button
            android:id="@+id/btnNum4"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="4"
            />
    </TableRow>
    <TableRow>
        <Button
            android:id="@+id/btnNum5"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="5"
            />
        <Button
            android:id="@+id/btnNum6"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="6"
            />
        <Button
            android:id="@+id/btnNum7"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="7"
            />
        <Button
            android:id="@+id/btnNum8"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="8"
            />
        <Button
            android:id="@+id/btnNum9"
            android:layout_width="50dp"
            android:layout_margin="2dp"
            android:padding="8dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="9"
            />
    </TableRow>
    <TableRow>
        <Button
            android:id="@+id/btnAdd"
            android:layout_margin="2dp"
            android:layout_span="2"
            android:padding="5dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="더하기"
            />
        <Button
            android:id="@+id/btnSub"
            android:layout_margin="2dp"
            android:layout_span="2"
            android:padding="2dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="빼기"
            />
    </TableRow>
    <TableRow>
        <Button
            android:id="@+id/btnMul"
            android:layout_margin="2dp"
            android:layout_span="2"
            android:padding="2dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="곱하기"
            />
        <Button
            android:id="@+id/btnDiv"
            android:layout_margin="2dp"
            android:layout_span="2"
            android:padding="2dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="나누기"
            />
        <Button
            android:id="@+id/btnCls"
            android:layout_margin="2dp"
            android:layout_span="1"
            android:padding="5dp"
            android:textSize="10pt"
            android:backgroundTint="#182351"
            android:text="cls"
            />
    </TableRow>

    <TableRow>
        <EditText
            android:id="@+id/textResult"
            android:layout_margin="2dp"
            android:layout_span="5"
            android:padding="2dp"
            android:textSize="10pt"
            android:background="#D2DDFF"
            android:hint="계산결과"
            />
    </TableRow>
</TableLayout>

MainActivity.java

package com.example.calctest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    //변수
    EditText edit1, edit2;
    Button btnAdd, btnSub, btnMul, btnDiv, btnCls;
    TextView textResult;

    String num1, num2; //누를버튼
    Integer result; //계산결과

    Button[] numButtons = new Button[10]; //배열생성
    Integer[] numBtnIDs = {
            R.id.btnNum0, R.id.btnNum1, R.id.btnNum2, R.id.btnNum3, R.id.btnNum4,
            R.id.btnNum5, R.id.btnNum6, R.id.btnNum7, R.id.btnNum8, R.id.btnNum9
    }; //버튼 10개의 아이디

    int i;//이벤트 끝난다음 for문에서 사용

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

        setTitle("계산기");
        //id값 가져오기
        edit1=(EditText) findViewById(R.id.edit1);//edit1 id값 가져오기
        edit2=(EditText) findViewById(R.id.edit2);//edit2 id값 가져오기
        btnAdd=(Button) findViewById(R.id.btnAdd);//btnAdd id값 가져오기
        btnSub=(Button) findViewById(R.id.btnSub);//btnSub id값 가져오기
        btnMul=(Button) findViewById(R.id.btnMul);//btnMul id값 가져오기
        btnDiv=(Button) findViewById(R.id.btnDiv);//btnDiv id값 가져오기
        btnCls=(Button) findViewById(R.id.btnCls);//btnCls id값 가져오기
        textResult=(TextView) findViewById(R.id.textResult);//textResult id값 가져오기
        //연산버튼 터치 이벤트-더하기
        btnAdd.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                if(num1.length()<1 || num2.length()<1){//길이가 1보다 작으면(없으면)
                    Toast.makeText(getApplicationContext(), "먼저 숫자를 선택(입력)하세요.", Toast.LENGTH_SHORT).show();
                    return false;
                }//if-end
                result=Integer.parseInt(num1)+Integer.parseInt(num2);//더하기 연산
                textResult.setText("연산결과"+result.toString());//연산결과
                return false;
            }
        });//btnAdd-event-end
        //연산버튼 터치 이벤트-빼기
        btnSub.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                if(num1.length()<1 || num2.length()<1){//길이가 1보다 작으면(없으면)
                    Toast.makeText(getApplicationContext(), "먼저 숫자를 선택(입력)하세요.", Toast.LENGTH_SHORT).show();
                    return false;
                }//if-end
                result=Integer.parseInt(num1)-Integer.parseInt(num2);//빼기 연산
                textResult.setText("연산결과"+result.toString());//연산결과
                return false;
            }
        });//btnSub-event-end
        //연산버튼 터치 이벤트-곱하기
        btnMul.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                if(num1.length()<1 || num2.length()<1){//길이가 1보다 작으면(없으면)
                    Toast.makeText(getApplicationContext(), "먼저 숫자를 선택(입력)하세요.", Toast.LENGTH_SHORT).show();
                    return false;
                }//if-end
                result=Integer.parseInt(num1)*Integer.parseInt(num2);//빼기 연산
                textResult.setText("연산결과"+result.toString());//연산결과
                return false;
            }
        });//btnMul-event-end
        //연산버튼 터치 이벤트-나누기
        btnDiv.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                if(num1.length()<1 || num2.length()<1){//길이가 1보다 작으면(없으면)
                    Toast.makeText(getApplicationContext(), "먼저 숫자를 선택(입력)하세요.", Toast.LENGTH_SHORT).show();
                    return false;
                }//if-end
                result=Integer.parseInt(num1)/Integer.parseInt(num2);//빼기 연산
                textResult.setText("연산결과"+result.toString());//연산결과
                return false;
            }
        });//btnDiv-event-end
        //연산버튼 터치 이벤트-Cls
        btnCls.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View view, MotionEvent motionEvent) {
                edit1.setText("");//숫자선택1
                edit2.setText("");//숫자선택2
                textResult.setText("");//연산결과
                return false;
            }
        });//btnCls-event-end
        
        //숫자 버튼을 클릭하여 데이터 입력하기
        for(i=0; i<numBtnIDs.length; i++){//버튼 배열 길이만큼 반복
            numButtons[i]=(Button) findViewById(numBtnIDs[i]); //버튼에 아이디값 넣기
        }//for-end
        
        //버튼 선택시 변수
        for(i=0; i<numBtnIDs.length; i++){//버튼 배열 길이만큼
            final int index; //변수
            index=i;
            numButtons[index].setOnClickListener(new View.OnClickListener() {//버튼에 버튼 배열 길이만큼 event반복
                @Override
                public void onClick(View view) {
                    if(edit1.isFocused()==true){//edit1텍스트에디터에 포커싱이 잡히면
                        num1=edit1.getText().toString()+numButtons[index].getText().toString();//num1에 edit1텍스트에디터를 String으로 변경+버튼의 텍스트를 String으로 변경
                        edit1.setText(num1);//
                    }else if(edit2.isFocused()==true){//edit2텍스트에디터에 포커싱이 잡히면
                        num2=edit2.getText().toString()+numButtons[index].getText().toString();//num2에 edit2텍스트에디터를 String으로 변경+버튼의 텍스트를 String으로 변경
                        edit2.setText(num2);//
                    }else{//edit1, edit2에 포커싱 없으면
                        Toast.makeText(getApplicationContext(), "먼저 텍스트영역을 선택하세요", Toast.LENGTH_SHORT).show();
                    }//if-else-if-end
                }//onClick-end
            });//numButtons[index]-end
        }//for-end
        
    }//onCreate-end
}//class-end

.isFocused()를 .isFocusable()로 잘못사용해서 edit1에만 숫자가 입력되는 슬픈일이 있었음.

.isFocusable() 메소드를 통해 포커스를 가질 수 있는지의 여부를 확인

// 사용가능 여부
view.setEnabled(true); 
view.isEnabled(); 

// 선택여부
view.setSelected(true); 
view.isSelected();

// 포커스 여부
view.setFocusable(true); 
view.isFocusable();

// 눌림 여부
view.setPressed(true); 
view.isPressed();

 



참고링크

https://jhshjs.tistory.com/58

https://arabiannight.tistory.com/352 

https://namsieon.com/324

반응형

'IT > Android' 카테고리의 다른 글

Android) 버튼클릭시 각각 다른 화면으로 이동!  (0) 2021.08.20
Android) Test  (0) 2021.08.14
Android) WebView  (0) 2021.08.07
Android) ActionBar.TabListener  (0) 2021.08.07
Android) TabHost  (0) 2021.08.07
Comments