web-dev-qa-db-ja.com

ActionBar(Android)にボタンを追加する方法は?

このスクリーンショットのように、例の右側のアクションバーにボタンを追加したい:

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;
}

ボタンを追加するにはどうすればよいですか?

29
Ponting

res/menu,override 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>
79
Blackbelt

アクティビティは、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;
}
_
18
Google

@Blackbeltに感謝します!メニューを拡張するための新しいメソッドシグネチャは次のとおりです。

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