How to create custom Popup Menu using Kotlin in AndroidStudio?

前端 未结 2 2146
Happy的楠姐
Happy的楠姐 2021-02-19 22:29

I am trying to create popup menu similarly like this on click on a button view in Android using Koltin. I searched for SOF and Google didn\'t find any suggestions. Can anyone pr

相关标签:
2条回答
  • 2021-02-19 23:08

    Following Kotlin's nice and clean principle: You can do this as well:

    1)in your .xml file: (but "onClick" in xml can be used while doing java as well)

    <Button 
      ........
      android:onClick="showPopUp"
      ....../>
    

    2)in your .kt file: (using kotlin's lambda expression)

    fun showPopUp(view: View) {
        val popupMenu = PopupMenu(this, view)
        val inflater = popupMenu.menuInflater
        inflater.inflate(R.menu.header_menu, popupMenu.menu)
        popupMenu.show()
    
        popupMenu.setOnMenuItemClickListener {
            when(it.itemId) {
                R.id.header1 -> {
                    Toast.makeText(this@MainActivity, item.title, Toast.LENGTH_SHORT).show();
                }
                R.id.header2 -> {
                    Toast.makeText(this@MainActivity, item.title, Toast.LENGTH_SHORT).show();
                }
                R.id.header3 -> {
                    Toast.makeText(this@MainActivity, item.title, Toast.LENGTH_SHORT).show();
                }
                ...........
            }
            true
        }
    }
    
    0 讨论(0)
  • 2021-02-19 23:23

    Finally, I did it, It may help someone

    Step 1. First, create an activity_main.xml contains a button named my_button

    Step 2. Then take header_menu.xml under res/menu:

    <?xml version="1.0" encoding="utf-8"?>
    <menu xmlns:android="http://schemas.android.com/apk/res/android">
    
        <item
            android:id="@+id/header1"
            android:title="H1" />
        <item
            android:id="@+id/header2"
            android:title="H2" />
        <item
            android:id="@+id/header3"
            android:title="H3" />
    
    </menu>
    

    Step 3. Finally, in MainActivity.kt use it like:

    class MainActivity : AppCompatActivity() {
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            my_button.setOnClickListener {
                 showPopup(my_button)
              }
        }
    
        private fun showPopup(view: View) {
            val popup = PopupMenu(this, view)
            popup.inflate(R.menu.header_menu)
    
            popup.setOnMenuItemClickListener(PopupMenu.OnMenuItemClickListener { item: MenuItem? ->
    
                when (item!!.itemId) {
                    R.id.header1 -> {
                        Toast.makeText(this@MainActivity, item.title, Toast.LENGTH_SHORT).show()
                    }
                    R.id.header2 -> {
                        Toast.makeText(this@MainActivity, item.title, Toast.LENGTH_SHORT).show()
                    }
                    R.id.header3 -> {
                        Toast.makeText(this@MainActivity, item.title, Toast.LENGTH_SHORT).show()
                    }
                }
    
                true
            })
    
            popup.show()
        }
    
    0 讨论(0)
提交回复
热议问题