如何在ActionBar(Android)中添加按钮?

35
我想在操作栏右侧添加一个按钮,就像这个屏幕截图中的示例一样: a screenshot of an actionbar with no buttons. the title is 'Example' 我在 onCreate 方法中获取 actionBar:
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);

并在onOptionsItemSelected方法中添加返回按钮代码,如下所示:

public boolean onOptionsItemSelected(MenuItem item){
    Intent myIntent = new Intent(getApplicationContext(),MainActivity.class);
    startActivityForResult(myIntent, 0);
    return true;
}

我该如何添加按钮?

2个回答

89

你需要在res/menu目录中创建一个入口,重写onCreateOptionsMenu并进行充气。

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

菜单中的一个条目可能是:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >
    <item
        android:id="@+id/action_cart"
        android:icon="@drawable/cart"
        android:orderInCategory="100"
        android:showAsAction="always"/> 
</menu>

好的,那可以。但我不明白orderInCategory和它的值100的用法。 - Ponting
这是一个整数,表示项目在组内的“重要性”顺序。您可以更改它。只要菜单中有一个或两个元素,它并不会有任何影响。您可以在此处阅读有关此内容的更多信息:http://developer.android.com/guide/topics/resources/menu-resource.html - Blackbelt
谢谢。现在另一个问题是我想在另一个活动中添加此菜单,但显示不同的按钮。那么我该怎么做? - Ponting
哦,我明白了,我需要在res/menu下创建不同的文件,以便在另一个活动中使用不同的菜单。顺便说一下,谢谢。 - Ponting
7
我们可以改变按钮的位置吗?我发现它在极右边,能否放到中心位置? - Pranav Mahajan
但是如果我想在操作栏中添加“按钮”而不是“图标”,我应该如何编写 https://stackoverflow.com/questions/41179217/xml-layout-look-weird-add-button-or-icon-in-action-bar - user5256621

22

一个活动在其onCreateOptionsMenu()方法中填充ActionBar。

不要使用setcustomview(),只需像这样覆盖onCreateOptionsMenu

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

如果在ActionBar中选择了一个操作,onOptionsItemSelected() 方法将被调用。它的参数是选择的操作。基于这个信息,您的代码可以决定要做什么,例如:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
  switch (item.getItemId()) {
    case R.id.menuitem1:
      Toast.makeText(this, "Menu Item 1 selected", Toast.LENGTH_SHORT).show();
      break;
    case R.id.menuitem2:
      Toast.makeText(this, "Menu item 2 selected", Toast.LENGTH_SHORT).show();
      break;
  }
  return true;
}

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