App에서 주기적이며 반복적인 작업이 필요한 경우가 있습니다.  화면을 주기적으로 갱신 하던가 서버와 데이터를 일정시간마다 반복적으로 보내고 받아야 하는 경우등에는 Timer를 사용하는것이 소스가 간단해서 무척 편합니다.  한가지 단점은 중지 시켰다 다시 시작하는 기능이 없기 때문에 만일 화면에서 버튼으로 제어 하려면 제어를 한다기 보다는 Timer를 매번 새로 생성을 해야 합니다. 두가지 경우를 샘플을 만들어 테스트 해보겠습니다

.

 

1. 타이머 생성 및 종료

 

먼저 타이머를 사용하기 위해 Activity에 선언을 합니다.

 

private Timer timerCall;
private int nCnt;

 

그리고 반복적으로 사용할 TimerTaskonCreate()에 생성합니다.

생성된 TimerTask Timer3초에 한번씩 호출 하도록 schedule 합니다.

 

TimerTask timerTask = new TimerTask() {
   
@Override
   
public void run() {
        someWork();
    }

);

nCnt = 0;

timerCall = new Timer();
timerCall.schedule(timerTask,0,3000);

 

3초에 한번씩 someWork()을 호출 하는 함수는 단순 로그 출력 입니다.

 

private void someWork() {

    Log.d("Test==>", nCnt + " work!!!");
   
if(nCnt >= 10) {
        timerCall.cancel();
    }


    nCnt++;
}

 

앱이 종료 할때까지 타이머가 작동하며 잘 출력 됩니다.

 

D/Test==>: 1 work!!!
D/Test==>: 2 work!!!
D/Test==>: 3 work!!!
D/Test==>: 4 work!!!
D/Test==>: 5 work!!!
D/Test==>: 6 work!!!
D/Test==>: 7 work!!!
D/Test==>: 8 work!!!
D/Test==>: 9 work!!!
D/Test==>: 10 work!!!

 

전체 소스

 

package copycoding.tistory.timertest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

   
private Timer timerCall;
   
private int nCnt;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.
activity_main);

       
nCnt = 0;

        TimerTask timerTask = new TimerTask() {
           
@Override
           
public void run() {
                someWork();
            }
        };

       
timerCall = new Timer();
       
timerCall.schedule(timerTask,0,1000);
    }

   
private void someWork() {

        Log.d(
"Test==>", nCnt + " work!!!");
       
if(nCnt >= 10) {
           
timerCall.cancel();
        }

       
nCnt++;
    }
}

 

 

2. 타이머 버튼 제어

 

이번에는 타이머를 버튼으로 제어를 해봅니다.   먼저 선언을 하고

 

private Timer timerCall;
private int nCnt;
TimerTask
timerTask;

 

onCreate()에 초기 값을 생성합니다.

 

nCnt = 0;

timerCall = new Timer();

 

start button을 클릭 하면 기존에 TimerTask가 있다면 삭제하고 다시 생성을 하여 타이머를 가동시켜주면 됩니다.

 

public void btnStart(View view) {
    Log.d(
"BTN Start==>", nCnt + " work!!!");
   
if(timerTask != null) {
       
timerTask.cancel();
    }
   
timerTask = new TimerTask() {
       
@Override
       
public void run() {
            someWork();
        }
    };
   
timerCall.schedule(timerTask,0,3000);
}

 

TimerTask를 삭제하지 않고 계속 생성 하면 기존 타이머가 죽지 않은 상황에서 계속 새로운 프로세스의 타이머가 만들어져 타이머로서의 기능을 할 수 없게 됩니다.

 

stop button을 클릭 하면 TimerTask가 작동중인지 확인하고 삭제를 하게 됩니다.

 

public void btnStop(View view) {
    Log.d(
"BTN Stop==>", nCnt + " work!!!");
   
if(timerTask != null) {
       
timerTask.cancel();
    }
}

 

타이머가 호출하는 작업 메소드는 단순히 증가하는 숫자를 로그로 남겨줍니다.

 

private void someWork() {

    Log.d(
"Test some work ==>", nCnt + " work!!!");

   
nCnt++;
}

 

화면은 그냥 버튼 2개만 추가 하였습니다.

 

 

로그에 남겨진 텍스트를 보면 어떻게 작동하는지 알 수 있습니다.  start 버튼에 cancel 로직을 주석처리해서 비교해 보면서 자신에 맞는 로직으로 수정하면 됩니다.

  

D/BTN Start==>: 0 work!!!
D/Test some work ==>: 0 work!!!
D/Test some work ==>: 1 work!!!
D/Test some work ==>: 2 work!!!
D/Test some work ==>: 3 work!!!
D/BTN Stop==>: 4 work!!!
D/BTN Start==>: 4 work!!!
D/Test some work ==>: 4 work!!!
D/Test some work ==>: 5 work!!!
D/Test some work ==>: 6 work!!!
D/BTN Stop==>: 7 work!!!

 

 

 

전체 소스

 

package copycoding.tistory.timertest;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;

import java.util.Timer;
import java.util.TimerTask;

public class MainActivity extends AppCompatActivity {

   
private Timer timerCall;
   
private int nCnt;
    TimerTask
timerTask;

   
@Override
   
protected void onCreate(Bundle savedInstanceState) {
       
super.onCreate(savedInstanceState);
        setContentView(R.layout.
activity_main);

       
nCnt = 0;

       
timerCall = new Timer();

    }

   
private void someWork() {

        Log.d(
"Test some work ==>", nCnt + " work!!!");

       
nCnt++;
    }

   
public void btnStart(View view) {
        Log.d(
"BTN Start==>", nCnt + " work!!!");
       
if(timerTask != null) {
           
timerTask.cancel();
        }
       
timerTask = new TimerTask() {
           
@Override
           
public void run() {
                someWork();
            }
        };
       
timerCall.schedule(timerTask,0,3000);
    }

   
public void btnStop(View view) {
        Log.d(
"BTN Stop==>", nCnt + " work!!!");
       
if(timerTask != null) {
           
timerTask.cancel();
        }
    }
}

 


앞에서 설명한 버튼 사용법 4가지를 하나의 프로젝트에 포함시켜 보았습니다.

그리고 이미지를 이용한 버튼 생성도 추가를 했습니다.

 

사용된 layout 구성은 ConstraintLayout 을 이용 하였고 버튼 위치는 editor가 아닌 수작업으로 위치를 표시 하였습니다.

 

1. 버튼 위치 잡기


1.1 text button


app:layout_constraintTop_toTopOf="parent" – 이걸로 위쪽 기준을 잡아줍니다.

android:layout_marginTop="76dp" – 위에서 잡은 기준으로 부터 76dp 떨어진 위치에서 시작합니다.


그럼 좌측도 동일하게

app:layout_constraintLeft_toLeftOf="parent" – 이걸로 좌측 기준을 정해야 합니다.

android:layout_marginLeft="50dp"  - 정해진 좌측 기준으로 부터 50dp 만큼 떨어진 위치에서 시작..

 

 

1.2 Image button


app:layout_constraintLeft_toLeftOf="parent"  - image도 동일하게 기준을 잡아 줍니다.

android:layout_marginTop="450dp" – 잡아준 기준으로 부터의 거리에 image를 위치 합니다.

android:src="@drawable/battery_charging_18dp" – 이건 이미지 위치

android:padding="0dp" – 이미지 여백. 0이면 여백이 없어 이미지 자체가 여백이 있어야 한다.

 

 

2. 이미지 버튼

 

2.1 이미지 + 텍스트

 

android:drawableXXX를 이용하여 구현해 보았습니다.

drawableLeft, drawableRight, drawableTop... 등등이 있으니 필요한 기능을 사용해 봅시다.

 

2.2 이미지 버튼

 

<ImageButton /> 태그를 이용하여 이미지 위치(android:src="@drawable/battery_charging_btn")를 정해 줍니다.

 

 

3. 기존 구현 버튼 모음

 

[android] 안드로이드 버튼(1) onClick() 함수 사용 방법

[android] 안드로이드 버튼(2) 생성시 OnClickListener 구현 방법

[android] 안드로이드 버튼(3) OnClickListener 인터페이스 구현 방법

[android] 안드로이드 버튼(4) OnClickListener 객체로 선언하여 구현하는 방법


4. Source Code

 

4.1 결과 화면


android img button


4.2 activity_main.xml


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_onclick1"
        android:text="@string/btn_click1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="50dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:onClick="btnClick"/>
    <Button
        android:id="@+id/btn_onclick2"
        android:text="@string/btn_click2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="100dp"
        android:layout_marginTop="50dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:onClick="btnClick"/>
    <Button
        android:id="@+id/btn_onclick3"
        android:text="@string/btn_click3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="200dp"
        android:layout_marginTop="50dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        android:onClick="btnClick"/>

    <Button
        android:id="@+id/btn_listener1"
        android:text="@string/btn_listen1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginTop="100dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/btn_listener2"
        android:text="@string/btn_listen2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="130dp"
        android:layout_marginTop="100dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/btn_listener3"
        android:text="@string/btn_listen3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="250dp"
        android:layout_marginTop="100dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_implements1"
        android:text="@string/btn_implement1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="150dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/btn_implements2"
        android:text="@string/btn_implement2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="125dp"
        android:layout_marginTop="150dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/btn_implements3"
        android:text="@string/btn_implement3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="245dp"
        android:layout_marginTop="150dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_object1"
        android:text="@string/btn_object1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="200dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/btn_object2"
        android:text="@string/btn_object2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="140dp"
        android:layout_marginTop="200dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
    <Button
        android:id="@+id/btn_object3"
        android:text="@string/btn_object3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="260dp"
        android:layout_marginTop="200dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_imgtext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="88dp"
        android:layout_marginTop="250dp"
        android:paddingRight="40dp"
        android:drawableLeft="@drawable/battery_charging"
        android:drawableRight="@drawable/battery_charging"
        android:drawableTop="@drawable/battery_charging"
        android:drawableBottom="@drawable/battery_charging"
        android:text="@string/btn_img_text"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <ImageButton
        android:id="@+id/btn_img"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="160dp"
        android:layout_marginTop="330dp"
        android:padding="0dp"
        android:src="@drawable/battery_charging_btn"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>


4.3 strings.xml


<resources>
    <string name="app_name">ButtonTest</string>
    <string name="btn_click1">onClick1</string>
    <string name="btn_click2">onClick2</string>
    <string name="btn_click3">onClick3</string>
    <string name="btn_listen1">Listener1</string>
    <string name="btn_listen2">Listener2</string>
    <string name="btn_listen3">Listener3</string>
    <string name="btn_implement1">Implement1</string>
    <string name="btn_implement2">Implement2</string>
    <string name="btn_implement3">Implement3</string>
    <string name="btn_object1">Object1</string>
    <string name="btn_object2">Object2</string>
    <string name="btn_object3">Object3</string>
    <string name="btn_img_text">Image Text Button</string>
</resources>


4.4 drawable image



버튼에 사용한 이미지






4.5 MainActivity.java


package com.example.desk.buttontest;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity
        implements Button.OnClickListener // 3. implements 구현 방법
{
    // 4. OnClickListener를 객체로 만드는 방법
    Button.OnClickListener btnObject = new View.OnClickListener() {
        public void onClick(View v) {
            if(v.getId() == R.id.btn_object1) {
                Toast.makeText(MainActivity.this, "Object Button1", Toast.LENGTH_SHORT).show();
            } else if(v.getId() == R.id.btn_object2) {
                Toast.makeText(MainActivity.this, "Object Button2", Toast.LENGTH_SHORT).show();
            } else if(v.getId() == R.id.btn_object3) {
                Toast.makeText(MainActivity.this, "Object Button3", Toast.LENGTH_SHORT).show();
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 2. Button 생성시 OnClickListner 구현 하는 방법
        Button btnListener1 = (Button)findViewById(R.id.btn_listener1);
        Button btnListener2 = (Button)findViewById(R.id.btn_listener2);
        Button btnListener3 = (Button)findViewById(R.id.btn_listener3);
        btnListener1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "Listener Button1", Toast.LENGTH_SHORT).show();
            }
        });
        btnListener2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "Listener Button2", Toast.LENGTH_SHORT).show();
            }
        });
        btnListener3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "Listener Button3", Toast.LENGTH_SHORT).show();
            }
        });

        // 3. MainActivity에 implements View.OnClickListener를 이용한 경우
        Button btnImplement1 = (Button)findViewById(R.id.btn_implements1);
        Button btnImplement2 = (Button)findViewById(R.id.btn_implements2);
        Button btnImplement3 = (Button)findViewById(R.id.btn_implements3);
        btnImplement1.setOnClickListener(this);
        btnImplement2.setOnClickListener(this);
        btnImplement3.setOnClickListener(this);
        //image button
        Button btnImgtext = (Button)findViewById(R.id.btn_imgtext);
        ImageButton btnImg = (ImageButton) findViewById(R.id.btn_img);
        btnImgtext.setOnClickListener(this);
        btnImg.setOnClickListener(this);

        // 4. OnClickListener를 객체로 만드는 방법
        findViewById(R.id.btn_object1).setOnClickListener(btnObject);
        findViewById(R.id.btn_object2).setOnClickListener(btnObject);
        findViewById(R.id.btn_object3).setOnClickListener(btnObject);
    }

    // 1. onClick 함수를 호출 하는 방법 (activity_main.xml)
    public void btnClick(View view) {
        if(view.getId() == R.id.btn_onclick1) {  // Buttoon의 ID를 찾아서 실행이 된다.
            Toast.makeText(this, "onClick Button1", Toast.LENGTH_SHORT).show();
        } else if(view.getId() == R.id.btn_onclick2) {
            Toast.makeText(this, "onClick Button2", Toast.LENGTH_SHORT).show();
        } else if(view.getId() == R.id.btn_onclick3) {
            Toast.makeText(this, "onClick Button3", Toast.LENGTH_SHORT).show();
        }
    }

    // 3. MainActivity에 implements View.OnClickListener를 이용한 경우
    @Override
    public void onClick(View v) {
        if(v.getId() == R.id.btn_implements1) {
            Toast.makeText(MainActivity.this, "implements Button1", Toast.LENGTH_SHORT).show();
        } else if(v.getId() == R.id.btn_implements2) {
            Toast.makeText(MainActivity.this, "implements Button2", Toast.LENGTH_SHORT).show();
        } else if(v.getId() == R.id.btn_implements3) {
            Toast.makeText(MainActivity.this, "implements Button3", Toast.LENGTH_SHORT).show();
        } else if(v.getId() == R.id.btn_imgtext) {
            Toast.makeText(MainActivity.this, "Image Text Button", Toast.LENGTH_SHORT).show();
        } else if(v.getId() == R.id.btn_img) {
            Toast.makeText(MainActivity.this, "Image Button", Toast.LENGTH_SHORT).show();
        }
    }
}

- copy coding -


Button.OnClickListener 객체를 생성하여 .버튼에 설정 해주는 방식입니다.

버튼 오브젝트를 생성하고

Button.OnClickListener btnObject = new View.OnClickListener(){public void onClick(View v){}};

이걸 callback으로 이용해서 버튼을 정의 합니다.

 

1. Layout에 이벤트 추가


activity_main.xmlButtonLayout을 구성 합니다.


<Button
android:id="@+id/btn_object1"
android:text="@string/btn_object1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="200dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />


3개의 버튼을 만들어서 테스트를 진행 합니다..

 

2. Activity에 기능 구현

 

Button.OnClickListener 객체를 생성 하고 각 버튼 클릭시 간단한 메시지를 보여주도록 합니다.


Button.OnClickListener btnObject = new View.OnClickListener() {
public void onClick(View v) {
if(v.getId() == R.id.btn_object1) {
Toast.makeText(MainActivity.this, "Object Button1", Toast.LENGTH_SHORT).show();
} else if(v.getId() == R.id.btn_object2) {
Toast.makeText(MainActivity.this, "Object Button2", Toast.LENGTH_SHORT).show();
} else if(v.getId() == R.id.btn_object3) {
Toast.makeText(MainActivity.this, "Object Button3", Toast.LENGTH_SHORT).show();
}
}
};

onCreate()에서 버튼에 생성된 Button.OnClickListener 객체를 대입해 줍니다.


findViewById(R.id.btn_object1).setOnClickListener(btnObject);
findViewById(R.id.btn_object2).setOnClickListener(btnObject);
findViewById(R.id.btn_object3).setOnClickListener(btnObject);


3. 결과


버튼 3개가 구현되고 선택을 하면 해당 메시지가 나타납니다.


android button onclicklistener



4. Source Code

 

4.1 activity_main.xml


버튼 3개를 구현 합니다.


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_object1"
        android:text="@string/btn_object1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="200dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_object2"
        android:text="@string/btn_object2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="140dp"
        android:layout_marginTop="200dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_object3"
        android:text="@string/btn_object3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="260dp"
        android:layout_marginTop="200dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

4.2 strings.xml


button에 사용되는 text 내용 입니다.


<resources>
    <string name="app_name">Button Object</string>
    <string name="btn_object1">Object1</string>
    <string name="btn_object2">Object2</string>
    <string name="btn_object3">Object3</string>
</resources>


4.3 MainActivity.java


package copycoding.button.object.buttonobject;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

//    Button.OnClickListener btnObject = new View.OnClickListener(){public void onClick(View v){}};
    // 4. OnClickListener를 객체로 만드는 방법
    Button.OnClickListener btnObject = new View.OnClickListener() {
        public void onClick(View v) {
            if(v.getId() == R.id.btn_object1) {
                Toast.makeText(MainActivity.this, "Object Button1", Toast.LENGTH_SHORT).show();
            } else if(v.getId() == R.id.btn_object2) {
                Toast.makeText(MainActivity.this, "Object Button2", Toast.LENGTH_SHORT).show();
            } else if(v.getId() == R.id.btn_object3) {
                Toast.makeText(MainActivity.this, "Object Button3", Toast.LENGTH_SHORT).show();
            }
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 4. OnClickListener를 객체로 만드는 방법
        findViewById(R.id.btn_object1).setOnClickListener(btnObject);
        findViewById(R.id.btn_object2).setOnClickListener(btnObject);
        findViewById(R.id.btn_object3).setOnClickListener(btnObject);
    }
}


다른 버튼 사용 관련 참조


[android] 안드로이드 버튼(1) onClick() 함수 사용 방법

[android] 안드로이드 버튼(2) 생성시 OnClickListener 구현 방법

[android] 안드로이드 버튼(3) OnClickListener 인터페이스 구현 방법

[android] 안드로이드 버튼(5) 버튼 생성 모음 이미지 버튼


- copy coding -


버튼의 OnClickListenerView.OnClickListener의 정의을 보면 다음과 같이 interface인 것을 알 수 있습니다.

public static interface View.OnClickListener

이걸 implements 받아 버튼 클릭 이벤트에 대한 인터페이스를 구현하는 방법 입니다.

 

 

1. Layout에 이벤트 추가


activity_main.xmlButtonLayout을 구성 합니다.

 

<Button
android:id="@+id/btn_implements1"
android:text="@string/btn_implement1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginTop="150dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />

동일한 형태의 버튼 3개를 만들어서 테스트를 진행 합니다..

 

2. Activity에 기능 구현

 

먼저 Activity class를 생성할 때 OnClickListenerimplements 받습니다.


public class MainActivity extends AppCompatActivity
implements View.OnClickListener // 3. implements 구현 방법

onCreate()에서 버튼을 생성해 줍니다.


// 3. MainActivity에 implements View.OnClickListener를 이용한 경우
Button btnImplement1 = (Button)findViewById(R.id.btn_implements1);
Button btnImplement2 = (Button)findViewById(R.id.btn_implements2);
Button btnImplement3 = (Button)findViewById(R.id.btn_implements3);
btnImplement1.setOnClickListener(this);
btnImplement2.setOnClickListener(this);
btnImplement3.setOnClickListener(this);

OnClickListeneronClick(View v)Overide 하여 필요한 작업을 구현 합니다.


// 3. MainActivity에 implements View.OnClickListener를 이용한 경우
@Override
public void onClick(View v) {
if(v.getId() == R.id.btn_implements1) {
Toast.makeText(MainActivity.this, "implements Button1", Toast.LENGTH_SHORT).show();
} else if(v.getId() == R.id.btn_implements2) {
Toast.makeText(MainActivity.this, "implements Button2", Toast.LENGTH_SHORT).show();
} else if(v.getId() == R.id.btn_implements3) {
Toast.makeText(MainActivity.this, "implements Button3", Toast.LENGTH_SHORT).show();
}
}


getId()를 이용하여 어떤 버튼이 클릭 되었는지 확인을 하고

각 버튼 클릭시 Toast로 간단한 메시지가 나타 나도록 했습니다.

 

3. 결과


버튼 3개가 구현되고 버튼 클릭시 메시지가 나타납니다.


android button



4. Source Code

 

4.1 activity_main.xml

 

화면 구성 layout에 버튼 3개를 추가 합니다.


<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/btn_implements1"
        android:text="@string/btn_implement1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="150dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_implements2"
        android:text="@string/btn_implement2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="125dp"
        android:layout_marginTop="150dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Button
        android:id="@+id/btn_implements3"
        android:text="@string/btn_implement3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="245dp"
        android:layout_marginTop="150dp"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</android.support.constraint.ConstraintLayout>

4.2 strings.xml


button에 사용되는 text를 정의 합니다.


<resources>
    <string name="app_name">Button Implements</string>
    <string name="btn_implement1">Implement1</string>
    <string name="btn_implement2">Implement2</string>
    <string name="btn_implement3">Implement3</string>
</resources>

4.3 MainActivity.java


버튼을 생성 하고 클릭 이벤트를 구현 합니다.


package copycoding.tistory.buttonimplements;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity
        implements View.OnClickListener // 3. implements 구현 방법
{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 3. MainActivity에 implements View.OnClickListener를 이용한 경우
        Button btnImplement1 = (Button)findViewById(R.id.btn_implements1);
        Button btnImplement2 = (Button)findViewById(R.id.btn_implements2);
        Button btnImplement3 = (Button)findViewById(R.id.btn_implements3);
        btnImplement1.setOnClickListener(this);
        btnImplement2.setOnClickListener(this);
        btnImplement3.setOnClickListener(this);
    }

    // 3. MainActivity에 implements View.OnClickListener를 이용한 경우
    @Override
    public void onClick(View v) {
        if(v.getId() == R.id.btn_implements1) {
            Toast.makeText(MainActivity.this, "implements Button1", Toast.LENGTH_SHORT).show();
        } else if(v.getId() == R.id.btn_implements2) {
            Toast.makeText(MainActivity.this, "implements Button2", Toast.LENGTH_SHORT).show();
        } else if(v.getId() == R.id.btn_implements3) {
            Toast.makeText(MainActivity.this, "implements Button3", Toast.LENGTH_SHORT).show();
        }
    }
}


다른 버튼 사용 관련 참조


[android] 안드로이드 버튼(1) onClick() 함수 사용 방법

[android] 안드로이드 버튼(2) 생성시 OnClickListener 구현 방법

[android] 안드로이드 버튼(4) OnClickListener 객체로 선언하여 구현하는 방법

[android] 안드로이드 버튼(5) 버튼 생성 모음 이미지 버튼


- copy coding -


12

+ Recent posts