안드로이드

안드로이드 기초 & 계산기 예제

full-moon 2022. 3. 30. 21:12

이 프로젝트는 Java로 진행하였습니다.

 

1. 안드로이드 기본 파일 구성요소

AndroidManifext.xml ,activity_main.xml, MainActivity.java, strings.xml 등등...

 

- java 
(1) 프로젝트를 생성할 때 만들어 준 패키지가 하위폴더로 있다.
  ex) com.example.fourbutton패키지는 con폴더 안에 example 폴더안에 fourbutton폴더가 있다.
(2) 패키지 안에 MainActivity.java로 된 메인 Java소스가 들어있다.

 

- manifests

(1) AndroidManifest.xml 파일이 들어있다.
(2) 앱의 여러가지 정보를 담고 있는 중요한 파일
(3) 필요에 따라 종종 수정하거나 변경

 

- res

(1) 앱 개발에 사용되는 이미지, 레이아웃, 문자열 등이 들어있음

(2) 이미지 파일은 drawable폴더에 넣음

(3) layout폴더에는 화면 구성하는 xml파일 넣음 / 기본적으로 activity_main.xml파일이 초기화면으로 지정

(4) values폴더에는 문자열 저장하는 strings.xml, 색상표 저장하는 colors.xml, 스타일 저장하는 themes.xml등이 있음

그 외에 필요에 따라서 다른 xml폴더 생성 가능

 

 

AndroidManifext : Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명

activity_main : Application의 기본 화면 구성(태그언어)

MainActivity : Application의 동작을 구성(Java or Kotlin)

strings : Application에 문자열 사용 및 관리

 

2. AndroidManifext 

모든 항목에 대한 설명은 생략하고 세 항목에서만 설명한다.

더 자세한 사항은에서 여기에서 확인한다.

android:icon : 앱의 icon 설정

android:label : 앱의 이름 설정

android:theme : 앱의 테마 설정

 

3. acivity_main

오른쪽 상단의 메뉴로 화면의 구성을 설정 가능합니다.

 

Design : 화면구성 부분만 보여준다.

split : 코드와 화면구성을 같이 보여준다.

 

code : 코드부분만 보여준다.

 

화면구성을 디자인 할땐 Design 화면에서 디자인 할 수 있지만

Code부분에서 코드로 디자인 하기를 권장한다고 한다.

 

 

4. MainActivity

MainActivity는 기본적으로 AppCompatActivity를 상속받는다. 

 

MainActivity는 기본적으로 onCreate 함수를 오버라이딩으로 받아와 사용한다. 

 ex) java의 public static void main(String[] args)와 비슷한 역할

레이아웃을 생성하고 초기화 컴포넌트를 불러온다.

액티비티 생명주기에 있어서 중요한 함수이다.

 

setContentView는 화면 디자인을 xml파일로 정의해 놓은것을 불러온다.

해당 xml파일은 R클래스를 통해 불러올 수 있으며

R클래스에는 id, string, drawable로 구성되어있다.

 

 

 

예제 코드

 

calculator.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/Edit1"
        android:layout_margin="10dp"
        android:inputType="numberDecimal"
        android:hint="숫자1"/>

    <EditText
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/Edit2"
        android:layout_margin="10dp"
        android:inputType="numberDecimal"
        android:hint="숫자2"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnAdd"
        android:layout_margin="10dp"
        android:text="더하기"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnMinus"
        android:layout_margin="10dp"
        android:text="빼기"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnMulti"
        android:layout_margin="10dp"
        android:text="곱하기"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnDivide"
        android:layout_margin="10dp"
        android:text="나누기"/>

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/BtnRem"
        android:layout_margin="10dp"
        android:text="나머지"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/TextResult"
        android:textSize="30dp"
        android:textColor="#FF0000"
        android:text="계산 결과 : "/>



</LinearLayout>

 

 

strings.xml

<resources>
    <string name="app_name">계산기 어플리케이션</string>
</resources>

 

MainActivity.java

package com.example.textexample;

import androidx.appcompat.app.AppCompatActivity;

import android.graphics.Color;
import android.graphics.Typeface;
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 java.util.regex.Pattern;

public class MainActivity extends AppCompatActivity {

    //double : 기본형 데이터타입 실수형 double
    //Double : 참조형 데이터 타입 Double 클래스

    Double num1, num2;
    Double result;
    
    //int : 기본형 데이터타입 정수형 int
    //Integer : 참조형 데이터타입 Integer 클래스

    Integer result2;


   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.calculator1);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
        getSupportActionBar().setIcon(R.drawable.img);


        EditText edText1,edText2;
        Button btnAdd, btnMinus, btnMulti, btnDivide, btnRem;
        TextView textView;



        edText1 = (EditText)findViewById(R.id.Edit1);
        edText2 = (EditText)findViewById(R.id.Edit2);
        btnAdd = (Button)findViewById(R.id.BtnAdd);
        btnMinus = (Button)findViewById(R.id.BtnMinus);
        btnMulti = (Button)findViewById(R.id.BtnMulti);
        btnDivide = (Button)findViewById(R.id.BtnDivide);
        btnRem = (Button)findViewById(R.id.BtnRem);
        textView = (TextView)findViewById(R.id.TextResult);


        btnAdd.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
                    Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
//                    Pattern.matches("^[0-9*$]*$",edText1.toString());
                }else{

                    num1 = Double.parseDouble(edText1.getText().toString());
                    num2 = Double.parseDouble(edText2.getText().toString());
                    if((num1+num2)%(num1.intValue()+num2.intValue())==0){
                        result2 = num1.intValue()+num2.intValue();
                        textView.setText("계산 결과 : "+result2);
                    }else{
                        result = num1 + num2;
                        textView.setText("계산 결과 : "+Math.round(result*100)/100.0);
                    }


                }

            }
        });

        btnMinus.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
                    Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
                }else {
                    num1 = Double.parseDouble(edText1.getText().toString());
                    num2 = Double.parseDouble(edText2.getText().toString());
                    if((num1+num2)%(num1.intValue()+num2.intValue())==0){
                        result2 = num1.intValue()-num2.intValue();
                        textView.setText("계산 결과 : "+result2);
                    }else {
                        result = num1 - num2;
                        textView.setText("계산 결과 : " + Math.round(result * 100) / 100.0);
                    }
                }
            }
        });


        btnMulti.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
                    Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
                }else {
                    num1 = Double.parseDouble(edText1.getText().toString());
                    num2 = Double.parseDouble(edText2.getText().toString());
                    if((num1+num2)%(num1.intValue()+num2.intValue())==0){
                        result2 = num1.intValue()*num2.intValue();
                        textView.setText("계산 결과 : "+result2);
                    }else {
                        result = num1 * num2;
                        textView.setText("계산 결과 : " + Math.round(result * 100) / 100.0);
                    }
                }
            }
        });


        btnDivide.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
                    Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
                }else {
                    num1 = Double.parseDouble(edText1.getText().toString());
                    num2 = Double.parseDouble(edText2.getText().toString());

                    if (num2 > 0) {
                        result = num1 / num2;
                        if(result%result.intValue() == 0){
                            textView.setText("계산 결과 : "+result.intValue());
                        }else{
                            textView.setText("계산 결과 : "+Math.round(result*100)/100.0);
                        }
                    } else {
                        Toast.makeText(getApplicationContext(), "0으로 나눌 수 없습니다!", Toast.LENGTH_SHORT).show();
                        textView.setText("계산 결과 : ");
                    }


                }
            }
        });

        btnRem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(edText1.getText().length() == 0 || edText2.getText().length() == 0 ){
                    Toast.makeText(getApplicationContext(),"숫자를 입력해주세요",Toast.LENGTH_SHORT).show();
                }else {
                    num1 = Double.parseDouble(edText1.getText().toString());
                    num2 = Double.parseDouble(edText2.getText().toString());

                    if (num2 > 0) {
                        result = num1 % num2;
                        if(result%result.intValue() == 0){
                            textView.setText("계산 결과 : "+result.intValue());
                        }else{
                            textView.setText("계산 결과 : "+result);
                        }
                    } else {
                        Toast.makeText(getApplicationContext(), "0으로 나눌 수 없습니다!", Toast.LENGTH_SHORT).show();
                        textView.setText("계산 결과 : ");
                    }

                }
            }
        });




    }
}

 

 

 

실행결과

 

-메인화면

메인화면

 

-연산 결과가 정수일때 정수로 출력

연산 결과가 정수결과 출력

 

-연산 결과가 실수일 땐 실수로 출력

연산 결과가 실수일 땐 실수로 출력

-0으로 나누기 방지

0으로 나누기 방지

-숫자 외 다른문자 입력방지

숫자 외 다른문자 입력방지

 

 

-Null값 방지

Null값 방지