[안드로이드 스튜디오]버튼, 클릭 이벤트 기본 사용법 – 클릭 이벤트[Button][1]

반응형

    메인이미지
    메인이미지

    안녕하세요.

    저번 텍스트 뷰에 이어서 오늘은 버튼과 클릭 리스너에 대해서 알아보려고 해요.

    그럼 오늘 알려드릴 버튼이라는 녀석에 대해서 먼저 설명해드려야겠죠.


    버튼에 대하여


    버튼은 텍스트 뷰처럼 앱을 구성할 때 굉장히 많이 사용하게 되는데 텍스트를 넣을 수 있는 일반적인 Button과 이미지를 넣을 수 있는 Image button으로 나뉩니다.

    오늘은 Button에 대해서만 설명해 드리겠습니다.

    버튼은 텍스트 뷰를 부모로 가지기 때문에 텍스트뷰가 가지고 있는 속성의 대부분을 사용할 수 있습니다.


    1. 버튼 사용법


    버튼을 레이아웃에 추가하는 방법은 이전에 설명드린 방법과 같습니다.

    팔레트에서 추가하는 방법, 프로그래밍적으로 추가하는 방법(액티비티 클래스에서의 코딩을 의미함,Xml 아님), Xml에서 직접 추가하는 방법이 있죠.

    오늘은 Xml에서 직접 추가하는 방법에 대해서만 설명해드리도록 하겠습니다.

    activity_main.xml
        <Button
            android:id="@+id/Button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Button"
            app:layout_constraintBottom_toTopOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

    레이아웃 안에 위와 같이 코드를 넣으면 버튼이 생성됩니다.

    속성에 Constraint 레이아웃 속성을 사용했는데 해당내용은 다음 포스팅에서 설명해 드리도록 할게요.


    2. 클릭 리스너


    클릭 리스너의 경우 위젯이 클릭되었을 때 안에 있는 함수를 작동시키는 객체로 사용자가 앱과 상호작용하기위한 하나의 수단으로 사용됩니다.

    자바에서는 객체를 new로 생성하고 함수를 호출하여 사용해야하는데 코틀린은 람다식을 지원해서 번거롭게 위의 과정을 수행할 필요 없이 한번에 함수를 불러올 수 있습니다.

    하지만 기존에 있던 방식도 사용할 수 있으니 아래 두개의 예제를 만들어 놓겠습니다.

    Object로 불러온 뒤 함수를 호출
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.view.View
    import android.widget.Button
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val button : Button = findViewById(R.id.Button)
            button.setOnClickListener(object : View.OnClickListener{
                override fun onClick(v: View?) {
                    //함수를 적어 넣으세요.
                }
            })
        }
    }
    람다식을 이용해 바로 호출
    MainActivity.kt
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.widget.Button
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val button : Button = findViewById(R.id.Button)
            button.setOnClickListener { 
                //함수를 적어 넣으세요
            }
        }
    }

    클릭 이벤트 리스너를 사용하기 위해서는 버튼을 findViewById()를 이용해 불러오거나 이전 텍스트뷰를 사용했을 때처럼 id를 이용해 바로 호출한 뒤 클릭리스너를 부여해주어야 합니다.

    아마 Object를 이용해 구현했을경우 노란줄이 생기실텐데 노란줄에 커서를 옮겨 놓은뒤 alt+enter을 같이 누르면 람다식으로 변경하는 옵션이 보입니다.

    해당 옵션을 선택하면 아래와 같이 변하죠.

    저는 람다식을 이용한 방법이 편해서 아래의 방법을 사용하고 있습니다.

     

    혹시 위에서 언급한 아이디를 이용해 바로 불러오는 것과 람다식을 바로 사용한 예제를 적어놓겠습니다.

    (이 방법을 사용할 때는 자료형이나 클래스 혹은 다른 것들과 이름이 겹치지 않게 위젯아이디를 설정해 주세요.)

    람다식 + id를 이용한 호출
    MainActivity.kt
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import kotlinx.android.synthetic.main.activity_main.*
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            testButton.setOnClickListener { 
                //함수를 적어넣어주세요.
            }
        }
    }

    이렇게 할경우 코드가 괸장히 줄어들어서 편하죠.

    다른 라이브러리를 import 할 필요 없이 id를 호출하고 레이아웃 파일을 임포트 해주면 됩니다.

    (레이아웃은 id를 호출할 때 tab를 이용하면 자동으로 추가됩니다.)


    3. 롱 클릭 리스너


    롱 클릭 리스너도 호출 방식은 같습니다.

    사용자가 위젯을 일정 시간동안 누른 채로 있으면 실행되는 함수이죠.

    이번에는 id말고 findViewById()를 이용해 호출하겠습니다.

    Object를 이용한 호출
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.view.View
    import android.widget.Button
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val button : Button = findViewById(R.id.testButton)
            button.setOnLongClickListener(object :View.OnLongClickListener{
                override fun onLongClick(v: View?): Boolean {
                    //함수를 적어 넣어주세요.
                    return true
                }
            })
        }
    }
    람다식을 이용한 호출
    MainActivity.kt
    import androidx.appcompat.app.AppCompatActivity
    import android.os.Bundle
    import android.widget.Button
    
    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
            val button : Button = findViewById(R.id.testButton)
            button.setOnLongClickListener {
                //함수를 적어 넣어주세요.
                true
            }
        }
    }

    보시면 아시겠지만 클릭리스너와 다르게 return 값이 필요합니다.

    하지만 그것을 제외하고는 사용방법은 똑같죠.


    4. 다른 위젯에도 클릭리스너를 부여 가능한가?


    , 가능합니다.

    하지만 특별한 상황이 아니라면 본래 클릭을 목적으로 만들어진 버튼에 클릭 리스너를 할당하는 것이 좋습니다.


    이렇게 오늘은 버튼, 클릭 리스너, 롱 클릭 리스너에 대해서 알려드렸습니다.

    이후에는 한동안 설명드리지 않았던 Constraint 레이아웃에 대해서 설명해 드릴까합니다.

    그런 뒤 한동안 코틀린 강좌를 진행한 뒤 기존 강좌들을 바탕으로 간단한 타이머 앱을 만들어보려고 합니다.

    그럼 저는 다음에 더 나은 포스팅으로 찾아뵙겠습니다.

    기대해주시면 감사하겠습니다.


    이전글 읽기

     

    [안드로이드 스튜디오]텍스트뷰 기본 사용법 – 문자 정렬, 글자 색, 크기, 내용 변경에 대해[TextView][1]

    안녕하세요. 오늘은 코틀린을 황용한 안드로이드 프로그래밍 강좌를 하기 위해서 이렇게 찾아 뵙게 되었습니다. 본래라면 안드로이드 스튜디오를 설치하고 프로젝트를 생성하는 방법 먼저 올렸겠지만 이번에는 그..

    postiveemblem.tistory.com

     


    이 글의 저작권은 전적으로 작성자인 P_Emblem에게 있으며
    허락없는 사용을 금합니다.

    댓글

    Designed by JB FACTORY