계산기
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 |
댓글