어플리케이션 제작_Count Up
오늘은 어플리케이션을 제작하려고 합니다.
버튼 터치시 숫자를 카운팅하는 어플리케이션입니다.
먼저 최종 화면부터 보여드리겠습니다.

화면 중앙의 “버튼”버튼을 클릭하면 텍스트뷰의 숫자가 1씩 커집니다. 최종적으로 텍스트뷰의 숫자가 100이 되면 “100!”이라는 토스트가 띄워집니다.
이번 강좌에서 버튼 터치 이벤트를 구현하는 방법에 대해 이해할 수 있을것 같습니다.
XML 뷰 설명합니다.

먼저 파란색으로 표시된 텍스트뷰의 숫자는 뷰 중앙에 위치한 버튼을 클릭했을때 1씩 커지도록 만들것입니다.
초록색으로 표시된 [종료] 버튼은 클릭했을때 어플을 종료시킵니다.
[초기화] 버튼은 텍스트뷰의 숫자를 0으로 초기화합니다.
이제 코딩을 합시다.

implements View.OnClickListener 부분은 안드로이드 스튜디오에서 작성 했으므로 이클립스와 문법이 조금 다릅니다.

이클립스를 사용할때는 위 사진대로 작성해주면 됩니다.
ps. 자동완성기능을 생활화 합시다. [Ctrl + Space]
OnClickListener를 implement 했을 시에 class명에 빨간색 오류가 나타나는 경우가 있습니다.
그 경우에는 해당하는 클래스명에 마우스를 가져가면 Add Unimplemented methods 라는 항목을 클릭해 주면 오류가 없어집니다.

이제 텍스트뷰, 버튼을 선언해 줍시다.
아래 코드들을 MainActivity아래에 붙여 넣어줍시다.
int count; Button btn; TextView tv; Button btnexit; Button btnreset; |

아래 코드들을 onCreate안에 붙여 넣어줍시다.
this.tv = (TextView)findViewById(R.id.textView); // 텍스트뷰
this.btn = (Button)findViewById(R.id.button); //클릭 버튼 this.btn.setOnClickListener(this); this.btnexit = (Button)findViewById(R.id.btnexit); // 종료버튼 this.btnexit.setOnClickListener(this);
this.btnreset = (Button)findViewById(R.id.btnreset); // 초기화버튼 this.btnreset.setOnClickListener(this);
this.count = 0; // count 변수 |
|
주의할점은 위 코드보면 노란색 부분은 자신이 뷰에서 만든 버튼, 텍스트뷰들의 ID값과 같아야 됩니다!
일단 우리가 사용할 방법은 OnClickListener를 implements 하여 Onclick 메소드를 구현 하는 방법입니다.
이 방법은 리스너를 많이 사용해야하는 상황에서 많이 쓰입니다.
OnClickListener를 다른 방법으로 사용하는 방법은 아래 링크에서 확인하실 수 있습니다.
링크 : https://goo.gl/vSK5K8

OnClickListener를 implements 하면 onClick 메소드가 생성됩니다.
코드 설명 들어갑니다.
public void onClick(View v) switch (v.getId()){ } |
onClick 메소드의 파라메터 View v는 Onclick 이벤트가 발생한 뷰를 참조합니다.
Onclick 이벤트가 발생한 뷰의 ID를 알아내면 어떤 버튼을 클릭한지 알 수 있겠죠?
이를 토대로 버튼을 구별하는 조건문을 onClick 내에 작성해 주시면 되겠습니다. 모든 뷰들의 부모 클래스 View는 getId라는 메소드를 제공합니다. 이를 호출하여 뷰의 ID를 파악할 수 있습니다. 버튼의 ID가 button이라면, 아래와 같이 코드를 작성할 수 있습니다.
public void onClick(View v) { // 어떤 버튼이 클릭되었는지를 버튼의 ID로 구별합니다. if (v.getId() == R.id.button) { // 버튼 클릭 후 처리될 작업이 여기에서 실행됩니다. // ... } }
|
이때, 노란색으로 표시한 button은 XML에서 선언한 뷰의 ID값입니다.
이제 onClick 메소드 안에 코드들을 붙여넣어줍시다.
switch (v.getId()){ case R.id.button : this.count++; // count값 1증가 if(this.count <= 100) { //count값이 100보다 작거나 같을때 this.tv.setText(String.valueOf(this.count)); // 텍스트뷰의 텍스트를 count값으로 지정 } if(this.count == 100){ //count값이 100일때 Toast toast = Toast.makeText(MainActivity.this,"100!",Toast.LENGTH_SHORT); toast.show(); //토스트 출력 } break; case R.id.btnexit : moveTaskToBack(true); finish(); break; case R.id.btnreset : this.count=0; //count 값을 0으로 초기화 this.tv.setText(String.valueOf(this.count)); //텍스트뷰의 값을 count값으로 지정 break; } |
다시한번 말씀드리지만, 노란색 부분은 자신이 XML에서 선언한 버튼, 텍스트뷰들의 ID값과 같아야 됩니다.
초록색, 파란색 부분은 따로 설명하겠습니다.
파란부분의 코드는 토스트(Toast)입니다.
토스트라는 이름은 마치 토스터기에서 나오는 빵처럼 화면에 톡~ 나타났다가 사라지는 메시지 라고 생각하시면 될 것 같습니다.
Toast toast = Toast.makeText(MainActivity.this,"100!",Toast.LENGTH_SHORT);
toast.show();
코드 분석해봅시다.
Toast.makeText의 첫번째 인수는 자신이 토스트를 뿌릴 액티비티를 써주시면 됩니다.
액티비티명.this 형식으로 써줍시다. ex) MainActivity.this
두번째 인수는 Toast에서 출력할 내용을 써주시면 됩니다.
String형 객체의 인스턴스를 인수로 넘겨도 오류없이 컴파일 됩니다.
세번째 인수는 토스트를 띄운후 메시지를 유지하는 시간으로, Toast.LENGTH_SHORT와 Toast.LENGTH_LONG가 있으며 SHORT는 2초, LONG는 4초간 출력합니다.
직접 int값을 넣을 경우 밀리세컨드로 적용됩니다. (1000= 1초)
마지막으로 초록색 부분의 코드설명하고 마치겠습니다.
case R.id.btnexit :
moveTaskToBack(true);
finish();
break;
코드 분석해봅시다.
moveTaskToBack(true);
이 메소드는 현재의 액티비티가 속해있는 테스크를 백그라운드로 즉시 이동됩니다.
바로 액티비티가 종료되는게 아니에요
finish()
현재 액티비티를 종료합니다.
-추가
OnClickListener를 선언하는 방법 한가지 추가 Xml의 버튼 속성에 android:onClick=“메소드명” 을 추가하고
Java에 public void 메소드명(View v) { // do your code } 메소드를 추가하면 버튼을 객체로 생성하여 리스너를 등록하는 과정없이 바로 메서드가 호출됩니다.
코드가 간결하여 이방식을 썼었지만 기능을 작성하는 코드와 뷰를 담당하는 레이아웃간의 의존성이 강해지는 단점이 있습니다. |