Programming Language/Android Programming

계산기

D4tai1 2018. 9. 3.

1. LinearLayout

1) Component Tree

 [1] 계산기에 사용될 플랫리스트

 

  - Textview = 프로그램 이름

  - EditText = 첫 번째 인자 입력장소

  - EditText = 두 번째 인자 입력장소

  - Button = 클릭 시 더하기 실행

  - Button = 클릭 시 빼기 실행

  - Button = 클릭 시 곱하기 실행

  - Button = 클릭 시 나누기 실행 

  - TextView = 연산결과 출력장소

 

 [2] LinearLayout의 속성

 

  - layout_width의 속성은 "match_parent"로 설정 (이렇게 해야 부모인 어플리케이션 가로영역을 최대로 차지)

  - layout_heigth의 속성은 "wrap_content"로 설정(세로는 적당한 사이즈를 부여, 원하는 길이 수동입력 가능)

 

 

  - padding의 속성은 상하좌우 10dp씩 부여하여 여백을 부여

 

2. 각 플랫의 속성

1) TextView

 

 

2) EditText

 

  

 

3) Button

   

  

 

4) TextView

 

3. 내부구현

- 버튼을 클릭 시 동작을 해야하기 때문에

[설치폴더]\app\java\com.example.d4tai1.pro20180903A_1[설치 시 설정한 각자의 도메인]\MainActivity.java 에 구현

 

1) 구현 소스

package com.example.d4tai1.pro20180903a_1;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;

import android.widget.TextView;
import android.widget.EditText;
import android.widget.Button;
//기본적으로 설정된거 제외한 바로 위 3개는
//사용할 플랫이기 때문에 등록
//객체에서 art + enter 시 import문 자동생성

public class MainActivity extends AppCompatActivity {

    EditText edit1, edit2;
    //첫번째인자와 두번째 인자를 타입에 맞춰
    //EditText 타입의 레퍼런스변수 edit1, edit2 선언
    //이 때 레퍼런스변수명은 activity_main.xml에서
    //선언한 id와 동일해야 한다.

    Button btnAdd, btnSub, btnMul, btnDiv;
    //Button 타입의 레퍼런스변수 4개 선언

    TextView name, result;
    //TextView 타입의 레퍼런스변수 2개 선언

    Integer data;
    // 연산결과를 저장하기 위해 Integer형 변수 data 선언

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //R Class의 layout의 activity_main.xml 이 먼저 보여진다.
        edit1 = (EditText)findViewById(R.id.edit1);
        edit2 = (EditText)findViewById(R.id.edit2);

        btnAdd = (Button)findViewById(R.id.btnAdd);
        btnSub = (Button)findViewById(R.id.btnSub);
        btnMul = (Button)findViewById(R.id.btnMul);
        btnDiv = (Button)findViewById(R.id.btnDiv);

        name = (TextView)findViewById(R.id.name);
        result = (TextView)findViewById(R.id.result);

        // findViewById()는
        // 위젯의 레퍼런스 변수명 = (플랫)findViewById(R.id.플랫);
        // 위 형태로 사용한다.
        // 즉, R(리소스의 약자) Class에는 모든 레퍼런스변수의 리소스가 있어서
        // id 값으로 보일레퍼런스변수(View)를 찾아낸다.
        // findViewById()로 R Class를 접근할 수 있다.

        btnAdd.setOnTouchListener(new View.OnTouchListener() {
            //이벤트핸들러, 이벤트 리스너란?
            //터치 및 클릭 등 특정 이벤트에 대해 서술할 수 있다.
            //사용방법?
            //btnAdd.setOn 까지만 입력 후 intelligence기능을 사용
            //원하는 이벤트핸들러 사용 후 ()내에
            //new 후 OnTouch까지 입력 후 메소드의 set빼고 동일하게 입력

            @Override
            public boolean onTouch(View v, MotionEvent event) {
                String num1 = edit1.getText().toString();
                String num2 = edit2.getText().toString();
                //edit1.getText()로 edit1에 있는 값을 가져온다.
                //그러나 getText()의 반환형이 String형이 아니므로
                //타입을 맞추기 위해 toString()을 적어 타입을 맞춰준다.
                //반환받은 String타입의 값을 num1과 num2에 저장한다.

                data = Integer.parseInt(num1) + Integer.parseInt(num2);
                //입력받은 두 수를 Integer타입으로 변환 후
                //연산결과를 data에 저장한다.

                result.setText("연산 결과 : " + data.toString());
                //data가 Integer 타입이므로 toString()메소드를 이용하여
                //String 타입으로 변환 후 결과를 출력한다.

                return false;
            }
        });

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

                data = Integer.parseInt(num1) - Integer.parseInt(num2);

                result.setText("연산 결과 : " + data.toString());
                return false;
            }
        });

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

                data = Integer.parseInt(num1) * Integer.parseInt(num2);

                result.setText("연산 결과 : " + data.toString());
                return false;
            }
        });

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

                data = Integer.parseInt(num1) / Integer.parseInt(num2);

                result.setText("연산 결과 : " + data.toString());
                return false;
            }
        });




    }
}

 

2) 세부설명

 [1] import

  - import는 처음에 기술하여도 좋지만

  사용하면서 필요한 것은 [art+Enter] 키를 사용하여 특정 위젯의 플랫을 자동으로 import할 수 있다.

 

 [2] 객체생성

  - 클래스명의 레퍼런스변수 생성

  - 레퍼런수변수의 이름은 activit_main.xml에서 선언한 플랫의 id와 동일해야 한다.

 

 [3] findViewById()

  - 보통 " [위젯의 레퍼런스변수명] = ([타입])findViewById(R.id.[위젯의ID]); " 형태로 사용한다.

  - R 클래스에는 모든 레퍼런스변수의 리소스가 있다.

  - id의 값으로 보일 레퍼런수변수를 찾아낸다.

  - R 클래스는 findViewById()로 접근할 수 있다.

 

 [4] Event Handler

  - 터치 및 클릭 등의 특정 이벤트에 대해 서술할 수 있다.

 

 [5] btnAdd.setOnTouchListener(new View.OnTouchListener())

  - View.OnTouchListener() 는 인터페이스이다.

  - 인터페이스는 객체가 될 수 없지만 익명의, 이름이 없는 객체를 생성 시에는 선언이 가능하다.

  - 즉 파라미터로만 사용이 가능하다는 말이다.

  - OnTouchListener()나 OnTouchListener()를 상속받아 구현한 모든 것을 받을 수 있다는 말이다.

  - 인터페이스이기 때문에 이름을 갖는 것은 new 할 수 없다.

 

 

4. 시연

- 각각의 버튼을 누를 때마다 연산결과가 아래에 적용된다.

 

'Programming Language > Android Programming' 카테고리의 다른 글

메뉴버튼  (0) 2018.10.09
계산기, 예약  (0) 2018.09.18
레이아웃  (0) 2018.09.14
체크박스, 스위치, 토글, 라디오  (0) 2018.09.04
프로그램 설치 및 기본 사용법  (0) 2018.08.28

댓글