2013-07-02 2 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

Деятельность заполнит ActionBar в методе onCreateOptionsMenu().

Вместо использования 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; 
} 
0

Благодаря @Blackbelt! Новый метод подписи для надувания меню заключается в следующем:

@Override 
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { 
     inflater.inflate(R.menu.my_meny, menu); 
} 
Смежные вопросы