1. ホーム
  2. android

[解決済み] Android 4.3 メニュー項目 showAsAction="always" を無視する。

2022-09-14 06:20:16

質問

Android 4.3 (API level 18) から利用可能になった新しい v7 appcompat ライブラリを使用しています。

メニュー項目の showAsAction で何が指定されているかに関係なく、表示されません。常にオーバーフローのメニュー アイコンが作成され、メニューの下に単一のメニュー項目さえ置かれます。

このようなアクティビティにメニューを追加しようとしています。

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_sizes, menu);
    return true;
}

そして、これが私のメニューxmlです。

<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@+id/menu_add_size"
        android:title="@string/menu_add_item"
        android:orderInCategory="10"
        android:showAsAction="always"
        android:icon="@android:drawable/ic_menu_add" />
</menu>

新しいサポートライブラリv7のバグなのか、それとも単にコードがおかしいのか? 今まで何度もActionBarSherlockで似たようなコードを使っていたのですが。

どのように解決するのですか?

必要な名前空間がない可能性があります。

<menu xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:[yourapp]="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/menu_add_size"
        android:title="@string/menu_add_item"
        android:orderInCategory="10"
        [yourapp]:showAsAction="always"
        android:icon="@android:drawable/ic_menu_add" />
</menu>

置換 [yourapp] をアプリ名や任意の名前空間に置き換えてください。

その他、確認すべきことがあります。

  • アクティビティクラスが ActionBarActivity

問題が解決しないかどうかを確認します。


Androidのリファレンスドキュメントです。 アクションボタンの追加 . 以下、該当の文章です。

アプリが Android 2.1 より低いバージョンでの互換性のためにサポート ライブラリを使用している場合、showAsAction 属性は android: 名前空間から利用できません。その代わりに、この属性はサポート ライブラリによって提供され、独自の XML 名前空間を定義し、その名前空間を属性のプレフィックスとして使用する必要があります。(独自の XML 名前空間はアプリ名に基づいている必要がありますが、任意の名前にすることができ、宣言したファイルの範囲内でのみアクセス可能です)。