新しいアップデートでは、GoogleはAPIレベル7以降のActionBarをサポートする新しいAPIサポートライブラリをリリースしました。
この更新までActionBarSherlockを使用し、メニューをロードするコードを作成しました。
_@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.activity_main, menu);
return true;
}
_
およびメニューファイル:
_<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:Android="http://schemas.Android.com/apk/res/Android">
<item Android:id="@+id/item_menu_ok" Android:icon="@drawable/ic_action_ok"
Android:title="@string/ok" Android:showAsAction="always"></item>
<item Android:id="@+id/item_menu_cancel" Android:icon="@drawable/ic_action_cancel"
Android:title="@string/cancel" Android:showAsAction="always"></item>
</menu>
_
アクションバーのメニューボタンを設定します。このコードは、ActionBarSherlockと完全に連携しました。しかし、アクションバーを新しいサポートライブラリに変更したとき、ボタンはアクションバーに表示されません。 _Android:showAsAction="always"
_として設定されている場合でも。そして、コードをデバッグすると、関数menu.getSize()
は2を返し、それは正しいですが、ボタンは表示されません。
新しいサポートライブラリにボタンが表示されないのはなぜですか?
デバイスまたはエミュレータのMENUボタンを押して、オーバーフローに表示されるかどうかを確認してください。
もしそうなら、問題はあなたの<menu>
XMLを変更する必要があります。 ActionBarSherlockおよびネイティブAPIレベル11+アクションバーで機能するメニューXMLは、AppCompatアクションバーバックポートでは機能しません。
メニューXMLは次のようにする必要があります。
<?xml version="1.0" encoding="utf-8"?>
<menu
xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:yourapp="http://schemas.Android.com/apk/res-auto"
>
<item Android:id="@+id/item_menu_ok" Android:icon="@drawable/ic_action_ok"
Android:title="@string/ok" yourapp:showAsAction="always"></item>
<item Android:id="@+id/item_menu_cancel" Android:icon="@drawable/ic_action_cancel"
Android:title="@string/cancel" yourapp:showAsAction="always"></item>
</menu>
また、アクションバーに関連する他のものには同じyourapp
プレフィックスを使用する必要があります(例:yourapp:actionLayout
)。
これは アクションバーのドキュメント で説明されています。
答え に少し追加したい
テキストとアイコンの両方を表示したい場合は、withText
のshowAsAction
を使用してください。 ; always
なしでifRoom
またはwithText
を使用すると、アイコンのみが表示されました。