【问题标题】:Is it ok to use one menu.xml layout file for all Activities?可以为所有活动使用一个 menu.xml 布局文件吗?
【发布时间】:2013-03-26 17:52:17
【问题描述】:

我正在尝试在我的活动中构建一个菜单导航系统。我将在我的应用程序中使用几个活动作为示例。我有一个地图活动、登录和列表活动。

Maps Activity 可以在按下物理菜单按钮后导航到这些 Activity: 登录并列出。地图图标/按钮不会出现在菜单中,因为它已经在地图活动中。

同样,List 可以进入 Login 和 Maps,但不能进入自身。与登录相同,它可以转到地图和列表,但不能转到自身。

现在,我为每个活动都有一个单独的菜单布局文件,其中包含基本相同的内容,但例如,地图活动将不包含地图菜单项。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
  <item android:id="@+id/list" android:title="List" android:icon="@drawable/ic_menu_list"/>
  <item android:id="@+id/login" android:title="Login" android:icon="@drawable/ic_menu_login"/>
</menu>

然后 List 将是这样的:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
  <item android:id="@+id/mapViewList" android:title="Map View" android:icon="@drawable/ic_menu_map"/>
  <item android:id="@+id/loginList" android:title="Login" android:icon="@drawable/ic_menu_login"/>
</menu>

因此,我的问题是,我是否可以使用一个菜单布局文件来包含每个菜单项,即使某些活动不使用该菜单项?多个活动指向同一个菜单文件是否安全?

即这个可以吗?请记住,并非所有项目都会在活动中使用,例如仅在地图中显示的刷新项目。

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/add" android:title="Add" android:icon="@drawable/ic_menu_add"/>
    <item android:id="@+id/mapView" android:title="Map View" android:icon="@drawable/ic_menu_map"/>
    <item android:id="@+id/list" android:title="List" android:icon="@drawable/ic_menu_list"/>
    <item android:id="@+id/refresh" android:title="Refresh" android:icon="@drawable/ic_menu_refresh"/>
    <item android:id="@+id/login" android:title="Login" android:icon="@drawable/ic_menu_login"/>
    <item android:id="@+id/logout" android:title="Logout" android:icon="@drawable/ic_menu_logout2"/>
</menu>

【问题讨论】:

  • 去吧。只需确保隐藏不使用的元素以免混淆用户。
  • 如果我只是覆盖 onPrepareOptionsMenu 会成功吗?

标签: android android-layout menuitem android-xml android-menu


【解决方案1】:

是的,多个活动使用相同的菜单 XML 是一样的。

请记住,所有选项都会显示给用户,即使您不使用其中的一些选项。您可以让它们在单击时不执行任何操作,但它们仍然可见。

您可以覆盖 onPrepareOptionsMenu() 以隐藏其中一些,例如地图之一:

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
    super.onPrepareOptionsMenu(menu);
    menu.findItem(R.id.mapView).setVisible(false);
    return true;
}

【讨论】:

  • 如果我重写 onPrepare 方法会怎样?
  • 我做过这样的事情:menu.clear(); menu.add(0, R.id.add, Menu.NONE, "Add").setIcon(R.drawable.ic_menu_add); menu.add(0, R.id.mapView, Menu.NONE, "地图").setIcon(R.drawable.ic_menu_map);
  • @JohnathanAu 这也有效。在您的情况下,您只需显示您想要的。我给出的代码隐藏了你没有的代码。相同的最终结果
  • 我已经完成了:menu.clear() 然后 menu.add() 我添加每个项目。这是一个合适的方法还是我应该做 setVisible?
  • 谢谢。只是想确定并知道我是否朝着正确的方向前进 =)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2013-06-25
  • 2016-05-08
  • 1970-01-01
  • 2013-07-31
  • 1970-01-01
相关资源
最近更新 更多