본문 바로가기
프로그래밍/안드로이드

안드로이드 탭 이벤트 처리하기

by pentode 2018. 4. 20.

안드로이드 앱은 다자인과 코드가 분리되어 있습니다. 디자인은 xml 파일로 작성되고 코드는 Java언어로 작성됩니다. 디자인된 위젯들이 사용자와 상호작용하려면 사용자가 화면을 탭하는 이벤트를 처리하여야 합니다. 디자인된 위젯과 코드를 연결하고 이벤트를 처리하는 방법을 알아보겠습니다.



1. 코드에서 다루고자 하는 위젯에 id 를 부여합니다. 

이 id가 Java 코드에서 위젯을 찾는 키가 되는 것입니다. 레이아웃 디자이너에서 위젯을 클릭하고 오른쪽의 속성창에서 위쪽의 ID 에 입력하면 됩니다. 이 예제 에서는 버튼에 okBtn 이라는 아이디를 붙였습니다.




다른 방법은 디자이너 하단의 Text 탭을 클릭하여 xml 파일을 직접 수정하는 것입니다. 이때에는 <Button android:id="@+id/okBtn"> 로 적어줍니다.





2. 코드에서 Activity 객체와 Layout XML 파일 연결하기

Activity 객체는 앱에서 하나의 화면이 될 객체 입니다. 이 예제에서는 MainActivity 인데, 프로젝트를 생성할때

기본값을 그대로 사용한 것입니다. 이 객체는 onCreate 메소드에서 setContentView(R.layout.activity_main); 으로 연결합니다.


여기서 R 객체는 자동으로 생성되는 객체로  앱의 resource 들과 자바코드를 이어주는 역할을 합니다. R.layout.activity_main 은 res 폴더아래 layout 폴더 아래의 activity_main.xml 파일을 뜻합니다.


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

}



3. 디자이너 내의 위젯들을 나타내는 객체 변수들을 선언합니다.

글을 보여주는 위젯이 TextView와 버튼 위젯인 Button 객체 타입의 변수 textView, okBtn을 멤버변수를 선언합니다.


import android.widget.Button;

import android.widget.TextView;


...


public class MainActivity extends AppCompatActivity {


    private TextView textView;

    private Button okBtn;


...



4. 위젯 객체의 멤버 변수와 디자이너의 위젯을 연결합니다.

Activity 클래스의 findViewById(); 메소드를 사용합니다. 이때 인자로 주는것이 R.id.okBtn 처럼 디자이너에서 부여한 id를 사용하게 됩니다. 그러므로 id 값은 하나의 디자일 파일 내에서 유일해야 합니다.


@Override

protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    

    textView = findViewById(R.id.textView);

    okBtn = findViewById(R.id.okBtn);

}



5. 버튼에 탭 이벤트를 처리하는 방법을 알아보겠습니다. 

휴대폰에는 손으로 터치하는 것을 탭 이벤트 라고 합니다. 보통 PC 에서 마우스로 하는 클릭 이벤트와 같다고 보면 되겠습니다. 이벤트 메소드 이름에도 click 이 들어갑니다.


버튼 객체에 setOnClickListener() 메소드를 사용해서 이벤트를 처리하는 리스너를 붙입이니다. 리스너 객체는 보통 익명 객체로 만들어 쓰는 일반적입니다. 버튼을 누르면 텍스트 뷰에 "OK 버튼이 눌려졌습니다." 로는 글을 출력하는 코드 입니다.


package com.tistory.pentode.helloworld;


import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;


public class MainActivity extends AppCompatActivity {


    private TextView textView;

    private Button okBtn;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);


        textView = findViewById(R.id.textView);

        okBtn = findViewById(R.id.okBtn);

        okBtn.setOnClickListener(new View.OnClickListener(){

            @Override

            public void onClick (View v){

                textView.setText("OK 버튼이 눌려졌습니다.");

            }

        });

    }

}



6. 실행 결과 입니다.



반응형