J'essaie de créer un menu contextuel de la même manière, comme this sur un bouton de vue dans Android à l'aide de Koltin. J'ai cherché SOF et Google n'a trouvé aucune suggestion. Quelqu'un peut-il fournir un exemple de code pour le réaliser à l'aide de kotlin.
Enfin, je l’ai fait, cela peut aider quelqu'un
Étape 1. Commencez par créer un activity_main.xml
contenant un bouton nommé my_button
Étape 2. Prenez ensuite header_menu.xml sous 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>
Étape 3. Enfin, dans MainActivity.Java, utilisez-le comme suit:
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()
}
Suivant le principe de Kotlin Un principe propre et agréable : Vous pouvez également le faire:
1) dans votre fichier .xml: (mais "onClick" en xml peut aussi être utilisé en Java)
<Button
........
Android:onClick="showPopUp"
....../>
2) dans votre fichier .kt: (en utilisant l'expression lambda de kotlin)
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
}
}