在Android Stiudio中一般使用getMenuInflater()的目的是什么?

时间:2018-09-03 16:58:30

标签: android android-menu android-optionsmenu android-contextmenu

我看到许多网站都提供了最佳答案,这确实消除了我对getMenuInflater()的怀疑,但找不到任何答案。 请让我知道,选项菜单中的getMenuInflater()的一般用途是什么?

3 个答案:

答案 0 :(得分:0)

您使用它来获取MenuInflaterMenuInflater可以“填充”菜单资源,将XML表示形式转换为MenuMenuItem对象的树。反过来,这些对象用于填充操作栏和Toolbar小部件之类的东西。

答案 1 :(得分:0)

该类用于将菜单XML文件实例化为Menu对象。

出于性能原因,菜单填充在很大程度上依赖于在构建时进行的XML文件的预处理。因此,当前无法在运行时通过纯XML文件在XmlPullParser中使用MenuInflater。它仅适用于从已编译资源(R. something文件)返回的XmlPullParser。

答案 2 :(得分:0)

MenuInflater:doc link

  

该类用于将菜单XML文件实例化为Menu对象。

     

出于性能方面的考虑,菜单膨胀严重依赖于   在构建时对XML文件进行预处理。因此,它   当前无法将MenuInflater与XmlPullParser一起使用   在运行时通过纯XML文件;它仅适用于XmlPullParser   从已编译资源(R.some文件)返回。

第一行的意思是,您可以使用XML文件动态添加/添加菜单。

膨胀上下文菜单的示例:

  

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>

活动代码(科特琳):

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

结果:

Context menu result