使用ActionBarSherlock将按钮添加到操作栏

19

我一直在尝试在SherlockActionBar中添加一个按钮,但是我无法让它正常工作。

这是我所拥有的代码:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        android.view.MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, (android.view.Menu) menu);
        return super.onCreateOptionsMenu(menu);
    }

这是我menu.xml的代码:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/save_button"
          android:title="i"
          android:showAsAction="always" />
</menu>

这不起作用,即使我按菜单按钮也没有任何显示。还有其他的方法吗?我做错了什么吗?

2个回答

38

您正在使用 Android 的菜单和 MenuInflater,但应该使用附带 ActionBarSherlock 的类:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
   com.actionbarsherlock.view.MenuInflater inflater = getSupportMenuInflater();
   inflater.inflate(R.menu.menu, (com.actionbarsherlock.view.Menu) menu);
   return super.onCreateOptionsMenu(menu);
}

你现在似乎混淆了两个。确保只导入 com.actionbarsherlock.view.Menu 和 com.actionbarsherlock.view.MenuInflater,而不是它的 Android 对应物。我建议你像下面这样做:

import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;

...

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
       MenuInflater inflater = getSupportMenuInflater();
       inflater.inflate(R.menu.menu, menu);
       return super.onCreateOptionsMenu(menu);
    }

这个功能非常好,但是在我的应用程序的所有活动和片段中都有这个按钮是可能的吗? - noloman
是的。创建一个包含onCreateOptionsMenu(...)方法的基础活动。接下来在想要显示ActionBar的活动中扩展此活动。 - user340145

20

我认为问题出在menu.xml中,您的项目没有完全声明android:showAsAction属性。您必须像这样声明它:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/save_button"
          android:title="i"
          android:showAsAction="always|withText" />
</menu>

由于您没有为该项指定任何图标,因此操作栏无法显示任何项目。默认情况下,将显示图标而不是文本。


1
谢谢!这正是我在寻找的!请删除空格(“always|withText”)。 - Paschalis
使用被接受的答案(由hanspeide提供)和这个答案,最终得到了一个带有图标的操作栏。谢谢! - Muzikant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接