如何在 AndroidStudio 中使用 Kotlin 创建自定义弹出菜单?

新手上路,请多包涵

我正在尝试使用 Koltin 在 Android 中单击按钮视图时类似 创建弹出菜单。我搜索了 SOF,谷歌没有找到任何建议。任何人都可以提供示例代码来使用 kotlin 实现它。

原文由 Shailendra Madda 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

最后,我做到了,它可能会帮助别人

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

第 2 步。然后在 header_menu.xml 下取 --- 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>

步骤 3. 最后,在 MainActivity.kt 中使用它:

 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()
    }

原文由 Shailendra Madda 发布,翻译遵循 CC BY-SA 4.0 许可协议

遵循 Kotlin 的 _nice and clean 原则_:您也可以这样做:

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

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

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
    }
}

原文由 Ujjwal Jung Thapa 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题