결국 무엇이든 해내는 사람

(Android) 계산기 만들기 - 최종 소스 본문

두서없는 공부 노트/Android

(Android) 계산기 만들기 - 최종 소스

kkm8257 2020. 8. 28. 17:54
반응형
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    android:weightSum="100"
    tools:context=".MainActivity">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="20"
        android:orientation="vertical"
        android:padding="5sp">

        <TextView
            android:id="@+id/result_text"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:gravity="right|center_vertical"
            android:padding="5sp"
            android:text="0"
            android:textSize="40sp"
            android:textColor="#6B918E8E"></TextView>
    </LinearLayout>

    <TextView
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:background="#000000">

    </TextView>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="80"
        android:orientation="vertical"
        android:padding="10dp"
        android:weightSum="100">


        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="20"
            android:orientation="horizontal"
            android:weightSum="100">

            <Button
                android:id="@+id/all_clear_button"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="buttonClick"
                android:text="AC"
                android:textSize="30dp"></Button>

            <Button
                android:id="@+id/clear_entry_button"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="buttonClick"
                android:text="CE"
                android:textSize="30dp">

            </Button>

            <Button
                android:id="@+id/back_space_button"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="buttonClick"
                android:text="BS"
                android:textSize="30dp"></Button>

            <Button
                android:id="@+id/division_button"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:backgroundTint="#8FFFFFFF"
                android:onClick="operatorClick"
                android:text="/"
                android:textSize="30dp"></Button>


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="20"
            android:orientation="horizontal"
            android:weightSum="100">

            <Button
                android:id="@+id/num_7"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="numButtonClick"
                android:text="7"
                android:textSize="30dp"></Button>

            <Button
                android:id="@+id/num_8"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="numButtonClick"
                android:text="8"
                android:textSize="30dp">

            </Button>

            <Button
                android:id="@+id/num_9"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="numButtonClick"
                android:text="9"
                android:textSize="30dp"></Button>

            <Button
                android:id="@+id/mul_button"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:backgroundTint="#8FFFFFFF"
                android:onClick="operatorClick"
                android:text="*"
                android:textSize="30dp"></Button>


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="20"
            android:orientation="horizontal"
            android:weightSum="100">

            <Button
                android:id="@+id/num_4"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="numButtonClick"
                android:text="4"
                android:textSize="30dp"></Button>

            <Button
                android:id="@+id/num_5"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="numButtonClick"
                android:text="5"
                android:textSize="30dp">

            </Button>

            <Button
                android:id="@+id/num_6"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="numButtonClick"
                android:text="6"
                android:textSize="30dp"></Button>

            <Button
                android:id="@+id/minus_button"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:backgroundTint="#8FFFFFFF"
                android:onClick="operatorClick"
                android:text="-"
                android:textSize="30dp"></Button>


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="20"
            android:orientation="horizontal"
            android:weightSum="100">

            <Button
                android:id="@+id/num_1"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="numButtonClick"
                android:text="1"
                android:textSize="30dp"></Button>

            <Button
                android:id="@+id/num_2"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="numButtonClick"
                android:text="2"
                android:textSize="30dp">

            </Button>

            <Button
                android:id="@+id/num_3"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="numButtonClick"
                android:text="3"
                android:textSize="30dp"></Button>

            <Button
                android:id="@+id/plus_button"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:backgroundTint="#8FFFFFFF"
                android:onClick="operatorClick"
                android:text="+"
                android:textSize="30dp"></Button>


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="20"
            android:orientation="horizontal"
            android:weightSum="100">

            <Button
                android:id="@+id/num_0"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="50"
                android:onClick="numButtonClick"
                android:text="0"
                android:textSize="30dp"></Button>

            <Button
                android:id="@+id/dot_button"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="buttonClick"
                android:text="."
                android:textSize="30dp">

            </Button>

            <Button
                android:id="@+id/result_button"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="25"
                android:onClick="operatorClick"
                android:text="="
                android:textSize="30dp"></Button>


        </LinearLayout>

    </LinearLayout>


</LinearLayout>

 

 

 

package com.example.youtube_cal;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    boolean isFirstInput = true; // 입력값이 처음입력값인지 체크
    int resultNumber = 0; //결과값

    char operator = '+';//입력된 연산자를 저장하는 변수


    final String CLEAR_INPUT_TEXT = "0";  //상수는 대문자로


    //주황색은 기본 변수 , 기본 변수는 기본의 값이 정해져있다 . 범위라던가 초기값,용량등등. 그래서 메모리에 바로 저장을한다.(할당)

    TextView resultText; //얘는 resultText에서 값을 가지고와서 쓸 변수임, 얘는 바로 초기화 불가능 , setContentView 실행후에 가능

    //TextView는 레퍼런스변수 (참조변수), 참조변수는 값이 얼마가 될지모른다. 그래서 메모리공간에 바로 저장 할 수가없음 . 그래서 주소값을 넣어준다


    // ctrl + alt + L 은 줄 자동정렬 단축키


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

        //R 은 Resource , id 는 아이디를 말함
        resultText = findViewById(R.id.result_text); //이제야 초기화 ㅇㅇ


    }


    public void buttonClick(View view) {//클릭리스너를 쓰지않고 메소드를 만들어서 사용
        switch (view.getId()) {

            case R.id.all_clear_button:
                resultNumber = 0;//0으로 초기화
                operator = '+';
                setClearText("0");
                break;

            case R.id.clear_entry_button:
                setClearText(CLEAR_INPUT_TEXT);
                break;

            case R.id.back_space_button:
                if (resultText.getText().length() > 1) { //길이에 맞게 삭제
                    String getResultText = resultText.getText().toString();
                    String subString = getResultText.substring(0, getResultText.length() - 1);
                    resultText.setText(subString);
                } else {
                    setClearText(CLEAR_INPUT_TEXT);

                }
                break;
            case R.id.dot_button:

                break;

        }
    }

    public void numButtonClick(View view) {
        Button getButton = findViewById(view.getId());  //버튼 메소드가 실행이 될때마다 , view가 들어와서

        if (isFirstInput) {//처음에 들어온 값이냐를 묻는 것
            resultText.setTextColor(0xFF000000); //누른숫자는 검은색
            resultText.setText(getButton.getText().toString());
            isFirstInput = false;//false로 바꾸어주기
        } else {
            if (resultText.getText().toString().equals("0")) {
                Toast.makeText(getApplicationContext(), "0으로 시작하는 숫자는 없습니다.", Toast.LENGTH_SHORT).show();
                setClearText(CLEAR_INPUT_TEXT);
                return;  //리턴을만나면 메소드를 빠져나감
            }
            resultText.append(getButton.getText().toString()); //뒤에 1추가

        }
    }

    public void setClearText(String clearText) {
        isFirstInput = true;
        resultText.setTextColor(0x6B918E8E);
        resultText.setText(clearText);

    }


    public void operatorClick(View view) {
        Button getButton = findViewById(view.getId());

        if (view.getId() == R.id.result_button) {
            if (isFirstInput ) {
                //=을 두번누르면
                resultNumber = 0;//0으로 초기화
                operator = '+';
                setClearText(CLEAR_INPUT_TEXT);
                //TODO: 실수계산기 구현시 수정
            } else {  //정상적인 =

                resultNumber = intCal(resultNumber, Integer.parseInt(resultText.getText().toString()), operator);
                resultText.setText(String.valueOf(resultNumber));
                isFirstInput = true;
            }

        } else {
            if (isFirstInput) {
                operator = getButton.getText().toString().charAt(0);
                //오퍼레이터만 저장해줌 (기호 두번눌럿을때)
            } else {
                int lastNum = Integer.parseInt(resultText.getText().toString());
                resultNumber = intCal(resultNumber, lastNum, operator);
                operator = getButton.getText().toString().charAt(0);
                resultText.setText(String.valueOf(resultNumber));
                isFirstInput = true;
            }


        }
    }

    public int intCal(int result, int lastNum, char op) {

        if (operator == '+') {
            result += lastNum;
        } else if (operator == '-') {
            result -= lastNum;
        } else if (operator == '/') {
            result /= lastNum;
        } else if (operator == '*') {
            result *= lastNum;
        }

        return result;

    }


}

반응형

'두서없는 공부 노트 > Android' 카테고리의 다른 글

setContentView  (0) 2020.09.10
onCreate, onResume , onPause , onDestroy  (0) 2020.09.10
(Android) 계산기 만들기 - 8  (0) 2020.08.25
(Android) 계산기 만들기 - 7  (0) 2020.08.25
(Android) 계산기 만들기 - 6  (0) 2020.08.25
Comments