web-dev-qa-db-fra.com

Android Kotlin créer un menu contextuel personnalisé

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.

4
Shylendra Madda

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

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
    }
}
0
Ujjwal Jung Thapa