我正在尝试使用Koltin点击Android中的按钮视图,类似this创建弹出菜单。我搜索了SOF,Google没有找到任何建议。任何人都可以使用kotlin提供示例代码来实现它。
答案 0 :(得分:10)
最后,我做到了,它可能有助于某人
步骤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>
步骤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()
}
答案 1 :(得分:0)
遵循科特林的干净原则: 您也可以这样做:
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
}
}