web-dev-qa-db-ja.com

メニューが表示されない「ActionBarActivity」を使用したandroid.support.v7

新しいアップデートでは、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を返し、それは正しいですが、ボタンは表示されません。

新しいサポートライブラリにボタンが表示されないのはなぜですか?

40
nrofis

デバイスまたはエミュレータの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)。

これは アクションバーのドキュメント で説明されています。

104
CommonsWare

答え に少し追加したい

テキストとアイコンの両方を表示したい場合は、withTextshowAsActionを使用してください。 ; alwaysなしでifRoomまたはwithTextを使用すると、アイコンのみが表示されました。

0
Maksim Dmitriev