0

我正在尝试在我的项目中实现 ActionBarSherlock。将菜单/操作项添加到操作栏正在 2.1 上工作,但在我的 nexus4 中没有,在 4.0.3 模拟器中也没有。问题是该功能 onCreateOptionsMenu(Menu menu) 永远不会在我的设备中被调用,而是在 2.1 中被调用,因此我手机的操作栏中没有显示任何操作项。

  1. 我已将 ActionBarSherlock 作为库包含在我的项目中。
  2. 我在清单文件中的应用程序中设置了适当的主题。
  3. 我用 SherlockActivity 扩展了我的活动课程。
  4. 我已经从 sherlock 库中覆盖了适当的类(到目前为止我知道,如果没有,菜单也不会显示在 2.1 的操作栏中)

以下是设置主题的清单的一部分。

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.Sherlock.Light.DarkActionBar" >

以下是 menu.xml 文件:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/menu_item_call"
        android:showAsAction="always"
        android:title="Call"/>
    <item
        android:id="@+id/menu_item_share"
        android:showAsAction="always"
        android:title="Share"/>
    <item
        android:id="@+id/menu_item_save"
        android:showAsAction="always"
        android:title="Save"/>

</menu>

以下是活动的相关部分。

    //other imports
        import com.actionbarsherlock.app.SherlockActivity;
        import com.actionbarsherlock.view.Menu;
        import com.actionbarsherlock.view.MenuInflater;
        import com.actionbarsherlock.view.Window;

        public class SelectCategories extends SherlockActivity implements
                OnClickListener {


        //other code


        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // TODO Auto-generated method stub
            MenuInflater inflater = getSupportMenuInflater();
            inflater.inflate(R.menu.menu, menu);
            return super.onCreateOptionsMenu(menu);
//return true; also has no effect
        }
        }

我一直在尝试解决这个问题,已经过去了几个小时但无法解决。请帮我。先感谢您。

4

4 回答 4

0

你必须返回真;而不是super.onCreateOptionsMenu(menu);

于 2013-07-07T14:02:04.453 回答
0

你有这些在 onCreate

private ActionBar mActionBar;
mActionBar = getSupportActionBar();
// mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
// mActionBar.setDisplayOptions(0, ActionBar.DISPLAY_SHOW_TITLE);

需要进口

import com.actionbarsherlock.app.ActionBar;

更新:动作栏

公开声明

com.actionbarsherlock.app.ActionBar

活动顶部的窗口功能,可以显示活动标题、导航模式和其他交互项。

从 Android 3.0(API 级别 11)开始,当 Activity 使用系统的 Holo 主题(或其后代主题之一)时,操作栏会出现在 Activity 窗口的顶部,这是默认设置。您可以通过调用 requestFeature(FEATURE_ACTION_BAR) 或在自定义主题中使用 windowActionBar 属性声明它来添加操作栏。

默认情况下,操作栏在左侧显示应用程序图标,然后是活动标题。如果您的活动有一个选项菜单,您可以直接从操作栏访问选择项作为“操作项”。您还可以修改操作栏的各种特性或将其完全删除。

从您的活动中,您可以通过调用 getActionBar() 来检索 ActionBar 的实例。

在某些情况下,操作栏可能会被另一个启用上下文操作的栏覆盖,使用 android.view.ActionMode。例如,当用户在您的活动中选择一个或多个项目时,您可以启用一种操作模式,该模式提供特定于所选项目的操作,并使用临时替换操作栏的 UI。尽管 UI 可能占用相同的空间,但 android.view.ActionMode API 与 ActionBar 的 API 不同且独立。

开发人员指南 有关如何使用操作栏的信息,包括如何添加操作项、导航模式等,请阅读操作栏开发人员指南。

于 2013-07-08T02:31:05.220 回答
0

这是我在 ActionBarSherlock 项目中使用的 onCreateOptionsMenu 函数:

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       getSupportMenuInflater().inflate(R.menu.menu, menu);
       return true;
    }

我希望我能告诉你为什么你的工作不正常。

于 2013-07-08T02:42:06.627 回答
0

终于想通了这个问题。

事实上,我正在尝试将现有项目更改为使用操作栏。主要是该项目使用了已弃用的 TabActivity。由于 ActionBarSherlock 不提供其自定义实现,我认为它应该按原样使用。那是我的错误。删除 tabactivity 后,我可以看到两个版本的菜单。

非常感谢所有试图提供帮助的人。

于 2013-07-10T19:13:55.030 回答