프로그래밍

[안드로이드 자바] 그리드 계산기(GridLayout) 본문

안드로이드/안드로이드 스튜디오

[안드로이드 자바] 그리드 계산기(GridLayout)

시케 2021. 12. 9. 12:06
728x90
반응형

 

 

디자인

 

 

프로젝트 설명

GridLayout으로 칸을 나눠 마치 표처럼 그린후 버튼을 배치하여 각 버튼으로 입력 및 계산이 가능하게 한다.

 

xml

<?xml version="1.0" encoding="utf-8"?>
<GridLayout 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:id="@+id/tableLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:columnCount="5"
    android:rowCount="9"
    tools:context=".MainActivity">

        <EditText
            android:id="@+id/Edit1"
            android:layout_row="0"
            android:layout_column="0"
            android:layout_columnSpan="5"
            android:layout_gravity="fill_horizontal"
            android:hint="숫자1 입력"></EditText>

        <EditText
            android:id="@+id/Edit2"
            android:layout_column="0"
            android:layout_row="1"
            android:layout_columnSpan="5"
            android:layout_gravity="fill_horizontal"
            android:hint="숫자2 입력"></EditText>

        <Button
            android:id="@+id/BtnNum0"
            android:layout_column="0"
            android:layout_row="2"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="0"></Button>
        <Button
            android:id="@+id/BtnNum1"
            android:layout_column="1"
            android:layout_row="2"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="1"></Button>
        <Button
            android:id="@+id/BtnNum2"
            android:layout_column="2"
            android:layout_row="2"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="2"></Button>
        <Button
            android:id="@+id/BtnNum3"
            android:layout_column="3"
            android:layout_row="2"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="3"></Button>

        <Button
            android:id="@+id/BtnNum4"
            android:layout_row="2"
            android:layout_column="4"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="4"></Button>

        <Button
            android:id="@+id/BtnNum5"
            android:layout_column="0"
            android:layout_row="3"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="5"></Button>
        <Button
            android:id="@+id/BtnNum6"
            android:layout_column="1"
            android:layout_row="3"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="6"></Button>
        <Button
            android:id="@+id/BtnNum7"
            android:layout_column="2"
            android:layout_row="3"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="7"></Button>
        <Button
            android:id="@+id/BtnNum8"
            android:layout_column="3"
            android:layout_row="3"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="8"></Button>
        <Button
            android:id="@+id/BtnNum9"
            android:layout_column="4"
            android:layout_row="3"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:text="9"></Button>

        <Button
            android:id="@+id/BtnAdd"
            android:layout_width="392dp"
            android:layout_row="4"
            android:layout_column="0"
            android:layout_columnSpan="5"
            android:layout_gravity="fill_horizontal"
            android:layout_margin="5dp"
            android:text="더하기"></Button>

        <Button
            android:id="@+id/BtnSub"
            android:layout_column="0"
            android:layout_row="5"
            android:layout_columnSpan="5"
            android:layout_gravity="fill_horizontal"
            android:text="빼기"
            android:layout_margin="5dp"></Button>

        <Button
            android:id="@+id/BtnMul"
            android:layout_column="0"
            android:layout_row="6"
            android:layout_columnSpan="5"
            android:layout_gravity="fill_horizontal"
            android:text="곱하기"
            android:layout_margin="5dp"></Button>

        <Button
            android:id="@+id/BtnDiv"
            android:layout_column="0"
            android:layout_row="7"
            android:layout_columnSpan="5"
            android:layout_gravity="fill_horizontal"
            android:text="나누기"
            android:layout_margin="5dp"></Button>

        <TextView
            android:id="@+id/TextResult"
            android:layout_column="0"
            android:layout_row="8"
            android:layout_columnSpan="5"
            android:layout_gravity="fill_horizontal"
            android:text="계산결과"
            android:textSize="20dp"
            android:textColor="#ff0000"></TextView>

</GridLayout>

 

 

Mainactivity.java

package com.example.gridcalc;

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;

import androidx.appcompat.app.AppCompatActivity;

public class MainActivity extends AppCompatActivity {

    EditText edit1, edit2;
    Button btnAdd, btnSub, btnMul, btnDiv;
    TextView textResult;
    String num1, num2;
    Integer result;
    int i;

    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 };

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        setTitle("그리드 레이아웃 계산기");

        edit1 = (EditText)findViewById(R.id.Edit1);
        edit2 = (EditText)findViewById(R.id.Edit2);
        btnAdd = (Button)findViewById(R.id.BtnAdd);
        btnSub = (Button)findViewById(R.id.BtnSub);
        btnDiv = (Button)findViewById(R.id.BtnDiv);
        btnMul = (Button)findViewById(R.id.BtnMul);

        textResult = (TextView)findViewById(R.id.TextResult);


        for(i=0; i<numBtnIDs.length; i++) {
            numButtons[i] = (Button) findViewById(numBtnIDs[i]);
        }

        for(i=0; i<numBtnIDs.length; i++) {
            final int index;
            index = i;


            numButtons[index].setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(edit1.isFocused()==true) {
                        num1 = edit1.getText().toString() + numButtons[index].getText().toString();
                        edit1.setText(num1);
                    } else if(edit2.isFocused()==true){
                        num2 = edit2.getText().toString() + numButtons[index].getText().toString();
                        edit2.setText(num2);
                    } else {
                        Toast.makeText(getApplicationContext(), "에디트를 먼저 선택하시오", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }

        btnAdd.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                result = Integer.parseInt(num1) + Integer.parseInt(num2);
                textResult.setText("계산결과 : " + result.toString());
                return false;
            }
        });

        btnSub.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                result = Integer.parseInt(num1) - Integer.parseInt(num2);
                textResult.setText("계산결과 : " + result.toString());
                return false;
            }
        });

        btnMul.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();
                result = Integer.parseInt(num1) * Integer.parseInt(num2);
                textResult.setText("계산결과 : " + result.toString());
                return false;
            }
        });

        btnDiv.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                num1 = edit1.getText().toString();
                num2 = edit2.getText().toString();

                if (num1.trim().equals("") || num2.trim().equals("")) {
                    Toast.makeText(getApplicationContext(), "값을 입력하세요", Toast.LENGTH_SHORT).show();

                } else { if (num2.trim().equals("0")) {
                            Toast.makeText(getApplicationContext(), "0으로 나눌 수 없습니다.", Toast.LENGTH_SHORT).show();

                } else {
                    result = Integer.parseInt(num1) / Integer.parseInt(num2);
                    textResult.setText("계산결과 : " + result.toString());
                    }
                }

                return false;
            }
        });
    }
}
728x90
반응형
Comments