2013-07-02 57 views
24

我想一个按钮来操作栏添加到实例的右侧在这个屏幕截图:如何在ActionBar(Android)中添加按钮?

a screenshot of an actionbar with no buttons. the title is 'Example'

我得到的ActionBar在onCreate方法为:

ActionBar actionBar = getActionBar(); 
actionBar.setDisplayHomeAsUpEnabled(true); 

和后退按钮(onOptionsItemSelected方法)如下:

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

如何添加按钮?

回答

72

你必须建立内部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> 
+0

Ok.That works.But我不明白使用orderInCategory和它的价值为100 – Ponting

+0

这是代表的“重要性”的顺序出现的整数项目,在一个组内。你可以改变它。只要你在菜单中有一两个元素,它就没有区别。你可以阅读关于它[这里](http://developer.android.com/guide/topics/resources/menu-resource.html) – Blackbelt

+0

谢谢。现在另一个问题是,我添加此菜单在另一个活动,但显示不同按钮,而不是这个。所以我该怎么做? – Ponting

14

的活动填充动作条在其onCreateOptionsMenu()方法。

而不是使用setcustomview()的,只是重写onCreateOptionsMenu这样的:如果选择在动作条的行动

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

,该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; 
} 
0

感谢@Blackbelt!为膨胀该菜单的新方法签名是这样的:

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.my_meny, menu); 
}