Android Kotlin创建自定义弹出菜单

Shy*_*dda 9 android popupmenu kotlin

我想类似的如创建弹出菜单上点击使用Koltin在Android上按钮视图.我搜索了SOF,Google没有找到任何建议.任何人都可以使用kotlin提供示例代码来实现它.

Shy*_*dda 13

最后,我做到了,它可能对某人有帮助

步骤1.首先,创建一个activity_main.xml包含名为的按钮my_button

步骤2.然后在res/menu下获取header_menu.xml:

<?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>
Run Code Online (Sandbox Code Playgroud)

第3步.最后,在MainActivity.java中使用它:

class MainActivity : AppCompatActivity() {

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

        val clickListener = View.OnClickListener { view ->
            when (view.id) {
                R.id.my_button -> {
                    showPopup(view)
                }
            }
        }

        my_button.setOnClickListener(clickListener)
    }

    private fun showPopup(view: View) {
        var popup: PopupMenu? = null;
        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()
    }
Run Code Online (Sandbox Code Playgroud)


Ujj*_*apa 5

遵循 Kotlin 的漂亮和干净的原则:你也可以这样做:

1)在你的.xml文件中:(但是xml中的“onClick”也可以在执行java时使用)

<Button 
  ........
  android:onClick="showPopUp"
  ....../>
Run Code Online (Sandbox Code Playgroud)

2)在你的.kt文件中:(使用kotlin的lambda表达式)

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
    }
}
Run Code Online (Sandbox Code Playgroud)