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