我们可以使用 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);
}
当然,您可以像以前一样设置子菜单。使用 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;