본문 바로가기
Android/실습

안드로이드 팝업 메뉴 Kotlin(코틀린)

by 둥글레차35 2023. 12. 13.

오늘은 클릭을 했을 때 팝업메뉴를 띄어보겠다.

1. 화면 구성

TextView를 클릭했을때 메뉴창을 띄어줄 수 있도록 TextView 하나만 만들어 주었다.

<?xml version="1.0" encoding="utf-8"?>
<androidx.appcompat.widget.LinearLayoutCompat 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">

    <TextView
        android:id="@+id/textView"
        android:text="메뉴 버튼"
        android:textSize="30dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>



</androidx.appcompat.widget.LinearLayoutCompat>

 

2. 메뉴 아이템 구성

res -> New -> Android Resource Directory -> Resource type을 menu로 설정

메뉴 아이템목록을 원하는대로 만들어준다. 

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:id="@+id/popup1"
        android:title="팝업 메뉴1" />
    <item
        android:id="@+id/popup2"
        android:title="팝업 메뉴2" />
    <item
        android:id="@+id/popup3"
        android:title="팝업 메뉴3" />
</menu>

 

3. MainActivity 코드

TextView 뷰바인딩및 클릭이벤트 설정에서 textView를 클릭했을 시 메뉴창이 나타나도록 설정 후 메뉴 목록을 클릭했을 시

발생할 이벤트를 설정

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

        val textView: TextView = findViewById(R.id.textView)
        textView.setOnClickListener {
            val popUpMenu = PopupMenu(applicationContext, it).setOnMenuItemClickListener {
                when (it.itemId) {
                    R.id.popup1 ->{
                        Toast.makeText(applicationContext, "1번 클릭", Toast.LENGTH_LONG).show()
                        return@setOnMenuItemClickListener true
                    }

                    else -> return@setOnMenuItemClickListener false


                }
            }
        }




    }
}

댓글