【发布时间】:2018-09-03 16:58:30
【问题描述】:
getMenuInflater() 在 android 中创建选项菜单的具体用途是什么?
【问题讨论】:
标签: android android-menu android-optionsmenu android-contextmenu
getMenuInflater() 在 android 中创建选项菜单的具体用途是什么?
【问题讨论】:
标签: android android-menu android-optionsmenu android-contextmenu
您使用它来获取MenuInflater。 MenuInflater 可以“膨胀”菜单资源,将 XML 表示转换为 Menu 和 MenuItem 对象的树。反过来,这些对象用于填充操作栏和Toolbar 小部件等内容。
【讨论】:
该类用于将菜单 XML 文件实例化为 Menu 对象。
出于性能原因,菜单膨胀很大程度上依赖于在构建时对 XML 文件进行的预处理。因此,目前无法在运行时在纯 XML 文件上使用带有 XmlPullParser 的 MenuInflater;它仅适用于从已编译资源(R. something 文件)返回的 XmlPullParser。
【讨论】:
MenuInflater:doc link
该类用于将菜单 XML 文件实例化为 Menu 对象。
出于性能原因,菜单膨胀在很大程度上依赖于 在构建时完成的 XML 文件的预处理。因此,它 当前无法将 MenuInflater 与 XmlPullParser 一起使用 在运行时通过纯 XML 文件;它仅适用于 XmlPullParser 从已编译的资源(R. something 文件)返回。
简单来说,第一行的意思是您可以使用 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>
活动代码(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)
}
结果:
【讨论】: