オーバーフロー メニュー内に特定のアイテムを表示する場合android:showAsAction="ifRoom"
は、menu.xml 内の特定のメニュー アイテムに使用します。
ターゲット デバイスに専用/ハード メニュー ボタンがある場合、ドキュメントに従ってアクション バー内にオーバーフロー ボタンが表示されないことに注意してください。
これもあなたを助けます..
編集
デバイスにハード ボタンがない場合、これによりオーバーフロー メニューが提供されます。ハードボタンがあってもオーバーフローメニューを表示したい場合は、次のことを試してください。
try {
ViewConfiguration config = ViewConfiguration.get(this);
Field menuKeyField = ViewConfiguration.class.getDeclaredField("sHasPermanentMenuKey");
if(menuKeyField != null) {
menuKeyField.setAccessible(true);
menuKeyField.setBoolean(config, false);
}
} catch (Exception ex) {
// Ignore
}
デバイスにハードメニューボタンを強制的に無視させるちょっとしたハックです。
次のコードを確認してください。この実装では、アイテム 4 はアクション バーにのみ表示され、その他はオーバーフロー メニュー内に表示されます。これは、Show_As_Always が提供されている唯一のものであるために発生します。
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
menu.add(0, 2, 0, "Item 1").setShowAsAction(MenuItem.SHOW_AS_ACTION_COLLAPSE_ACTION_VIEW);
menu.add(0, 2, 0, "Item 2").setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
menu.add(0, 2, 0, "Item 3").setShowAsAction(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
menu.add(0, 2, 0, "Item 4").setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
menu.add(0, 2, 0, "Item 5").setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
return true;
}