如何在 Android 菜单 xml 的多个菜单中包含一个通用菜单项?
Posted
技术标签:
【中文标题】如何在 Android 菜单 xml 的多个菜单中包含一个通用菜单项?【英文标题】:How to include a common menu item in multiple menus in Android menu xml? 【发布时间】:2011-05-19 05:34:41 【问题描述】:许多菜单总是有一个相同的项目。
有没有办法将该项目定义为额外菜单并将其包含在所有其他菜单中?
类似这样的:
菜单/main.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_main"
android:title="@string/text_mainmenu" />
</menu>
菜单/other.xml
<menu xmlns:android="http://schemas.android.com/apk/res/android"
parent="@menu/main">
<item android:id="@+id/menu_other"
android:title="@string/text_othermenu" />
</menu>
我知道,可以通过编程方式进行,但我认为 xml-way 更好。
【问题讨论】:
【参考方案1】:膨胀每个菜单并调用 super 效果很好! 这是一个例子:
@Override
public boolean onCreateOptionsMenu(Menu menu)
super.onCreateOptionsMenu(menu);
getMenuInflater().inflate(R.menu.main, menu);
getMenuInflater().inflate(R.menu.other, menu);
return true;
如果 super 还通过在其他膨胀之前/之后调用它来添加更多项目,您可以控制顺序,或者根本不调用它以忽略这些项目。
【讨论】:
对我来说也很好用——在我的情况下,我将 super 放在onCreateOptionsMenu()
的末尾,以便“不同”菜单选项显示在菜单顶部而不是底部。
使用 android:orderInCategory 有一个明确的项目顺序,它独立于膨胀顺序。
非常有帮助。此功能的另一种用法是让 Activity B 扩展 Activity A —— 每个都有自己的菜单。在这种情况下,Activity B 将拥有其菜单定义的菜单选项与 Activity A 使用的菜单定义的菜单选项。
太棒了,有人真的举了一个例子,这么多的 android 菜单示例,所有这些似乎都是super() clear() inflate()
,这违背了拥有对象层次结构的目的。【参考方案2】:
AFAIK,<include>
仅适用于布局 XML,不适用于菜单 XML,尽管您当然可以尝试一下。缺少这一点,编程选项(膨胀两个菜单 XML 文件)是我知道的唯一选项。
【讨论】:
正如我写的关于编程方式的内容,我的意思有点不同,但后来我看到,我可以在我的活动中为每个单独的菜单充气,从而从一些菜单石创建自定义菜单。谢谢你让我想到这个主意。 @Tima Genius!没想过膨胀多个菜单 XML。话虽如此,我觉得奇怪的是include
和 merge
仅在布局中受支持,但是,嘿,我知道什么。
小代码示例可能很好,我不会经常看到在没有 clear() 的情况下在给定菜单上多次发生膨胀。以上是关于如何在 Android 菜单 xml 的多个菜单中包含一个通用菜单项?的主要内容,如果未能解决你的问题,请参考以下文章