「本物の」オーバーフロー メニューを取得しようとする代わりに、SubMenu を使用してそれを偽造することができます。
元のオーバーフロー ボタンと同じように表示され、同じように動作しますが、常にそこにあるため、より優れています。
private Menu mainMenu;
private SubMenu subMenu1;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
mainMenu = menu;
subMenu1 = menu.addSubMenu("");
subMenu1.add("Settings");
subMenu1.add("About");
subMenu1.add("Help");
MenuItem subMenu1Item = subMenu1.getItem();
subMenu1Item.setIcon(R.drawable.ic_menu_moreoverflow_normal_holo_dark);
subMenu1Item.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
return super.onCreateOptionsMenu(menu);
}
もちろん、前と同じように subMenus を設定できます。groudID、itemIDなどで
メニュー アイコンとして *ic_menu_moreoverflow_normal_holo_dark* を既に選択していることに注意してください。この方法では、ボタンもオーバーフローのように見えます。
ここで、ユーザーがハードウェア メニュー ボタンを押したときにこのサブメニューを開く必要があります。前に行ったように mainMenu と subMenu1 を設定すると、これを非常に簡単に行うことができます。
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
mainMenu.performIdentifierAction(subMenu1.getItem().getItemId(), 0);
return true;
}
return super.onKeyUp(keyCode, event);
}
インポートすることに注意してください:
import com.actionbarsherlock.view.SubMenu;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuItem;
ではない:
import android.view.MenuItem;