菜单项在2.1中的操作栏中显示,但不在4.0.3,4.2(nexus 4)中使用ActionBarSherlock显示

时间:2013-07-07 13:53:47

标签: android actionbarsherlock android-actionbar

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

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

    <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 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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;

更新:ActionBar

  

公开声明

     

com.actionbarsherlock.app.ActionBar

     

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

     

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

     

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

     

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

     

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

     

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

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

最后想出了问题。

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

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