what is the purpose of using getMenuInflater() in general in android studio?

3.1k views Asked by At

What is the exact use of getMenuInflater() in creating options menu in android?

3

There are 3 answers

0
CommonsWare On

You use it to get a MenuInflater. A MenuInflater can "inflate" menu resources, converting the XML representation into a tree of Menu and MenuItem objects. In turn, those objects are used to populate things like the action bar and Toolbar widgets.

1
Grigori Lara Baltazar On

This class is used to instantiate menu XML files into Menu objects.

For performance reasons, menu inflation relies heavily on pre-processing of XML files that is done at build time. Therefore, it is not currently possible to use MenuInflater with an XmlPullParser over a plain XML file at runtime; it only works with an XmlPullParser returned from a compiled resource (R. something file.)

0
Anmol On

MenuInflater: doc link

This class is used to instantiate menu XML files into Menu objects.

For performance reasons, menu inflation relies heavily on pre-processing of XML files that is done at build time. Therefore, it is not currently possible to use MenuInflater with an XmlPullParser over a plain XML file at runtime; it only works with an XmlPullParser returned from a compiled resource (R. something file.)

What First line mean's in simple words is you can dynamically add/inflate Menu using XML files.

EXAMPLE of inflating context menu:

style.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/cut"
        android:title="Cut"
        app:showAsAction="always" />
    <item android:id="@+id/copy"
        android:title="Copy"
        app:showAsAction="always" />
    <item android:id="@+id/paste"
        android:title="Paste"
        app:showAsAction="always" />
</menu>

Activity Code (Kotlin):

override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenu.ContextMenuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo)
        val menuInflater = this.activity!!.menuInflater
        menuInflater.inflate(R.menu.style, menu)
    }

Result:

Context menu result