상세 컨텐츠

본문 제목

안드로이드(ANDROID) - 버튼(Button) 클릭 이벤트

Android 자료실/기능 개발

by Victorywskim 2020. 3. 26. 11:20

본문

반응형

맞춤법 검사를 원하는 단어나 문장을 입력해 주세요. 이번엔 안드로이드 버튼 클릭 이벤트에 대해 알아보려 한다.

버튼 클릭 이벤트에 대한 내용은 이미 여러 방법이 있지만 내가 주로 쓰는 방식을 적어보려 한다.

우선 2가지 케이스로 나눠볼 수 있을 것인데 해당 내용은 다음과 같다.

 

1. 페이지에 버튼이 한개만 필요한 경우

2. 페이지에 버튼이 여러개 필요한 경우

 

위의 사례는 예제를 참고하여 자신이 필요한 상황에 맞게 쓰면 좋을듯하다.

 

1. 페이지에 버튼이 한개만 필요 경우

 

여담으로 자바에서는 변수 선언 시 findViewById 를 통해 XML과 자바 파일을 연결해 줘야 했지만 코틀린으로 넘어오면서 최근 프로젝트 생성 시 Gradle에 아래 코드가 자동으로 추가되어 너무 편리하다. (버터나이프를 안써도 되서 좋당)



참고로 아래 코드가 Gradle에 포함되어 있으면 코틀린 클래스에서 위와 같이 바인딩 된 XML의 아이디를 자동으로 가져올 수 있다.

apply plugin: 'kotlin-android-extensions'

 

주로 버튼이 한개만 있는 경우에는 특별하게 함수를 별도로 분리해서 쓰기보다는 아래와 같이 사용한다.

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    normalBtn.setOnClickListener {
        Toast.makeText(this, "버튼 클릭!", Toast.LENGTH_SHORT).show()
    }
}

 

2. 페이지에 버튼이 여러개 필요경우

 

버튼이 여러개인 경우 CLASS 혹은 XML의 2가지 방법으로 분류하여 사용하는데 구현 방법과 다음과 같다.

 

1) CLASS

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    setButtonClickEvent()
}

private fun setButtonClickEvent(){
    normalBtn.setOnClickListener {onClick(normalBtn)}
    normalBtn2.setOnClickListener {onClick(normalBtn2)}
    normalBtn3.setOnClickListener {onClick(normalBtn3)}
}

private fun onClick(view: View) = View.OnClickListener {
    when(view){
        normalBtn, normalBtn2 -> {
            Toast.makeText(this, "버튼 클릭1", Toast.LENGTH_SHORT).show()
        }

        normalBtn3 -> {
            Toast.makeText(this, "버튼 클릭2", Toast.LENGTH_SHORT).show()
        }
    }
}

위 예제는 버튼이 여러 개 필요한 경우 유지 보수 차원에서 버튼 이벤트를 하나로 모아서 사용하고 싶을 때 쓰고 있는 방식이다.

 

 

 

 

2) XML

 

- XML

<LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:orientation="vertical">

        <Button
            android:id="@+id/normalBtn"
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:onClick="onClick"
            android:text="버튼 1" />

        <Button
            android:id="@+id/normalBtn2"
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:onClick="onClick"
            android:text="버튼 2" />

        <Button
            android:id="@+id/normalBtn3"
            android:layout_width="match_parent"
            android:layout_height="35dp"
            android:onClick="onClick"
            android:text="버튼 3" />

    </LinearLayout>

- CLASS

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
}

 fun onClick(view: View){
    when(view){
        normalBtn, normalBtn2 -> {
            Toast.makeText(this, "버튼 클릭1", Toast.LENGTH_SHORT).show()
        }

        normalBtn3 -> {
            Toast.makeText(this, "버튼 클릭2", Toast.LENGTH_SHORT).show()
        }
    }
}

위 예제는 XML에서 레이아웃을 구성하면서 View와 CLASS를 연결 시켜서 구현하는 방식이다.

CLASS 부분에 onCreate를 포함한 이유는 별도의 연동이 없이도 클릭 이벤트가 발생한다는 것을 보여주기 위함이다.

 

1)과 2) 각각 장단점을 꼽자면 개인적으로는 딱히 없을듯하지만 1)이 조금 더 나에게 맞는 방법인듯하다.

2)은 버튼 이벤트가 클래스 생성과 동시에 적용되지만 1)은 내가 선언하지 않으면 적용되지 않기 때문이다.

 

어떤 방법으로든 자신의 스타일에 맞게, 혹은 협업하는 사람들과 협의하여 효율적인 방법으로 작업하면 좋을듯하다.

 

 

 

반응형

관련글 더보기